问题描述
|
我知道大量介绍了按引用传递和按指针传递的主题...可以肯定的是,在我阅读以下内容之前,我已经理解了所有细微差别:
http://carlo17.home.xs4all.nl/cpp/const.qualifier.html
读取(以防链接断开)
The prototype for foobar can have any of the following footprints:
void foobar(TYPE); // Pass by value
void foobar(TYPE&); // Pass by reference
void foobar(TYPE const&); // Pass by const reference
Note that I put the const to the right of TYPE because we don\'t know if TYPE (this is not a template parameter,but rather for instance a literal char*) is a pointer or not!
作者的意思是“请注意,我将const放在TYPE的右边,因为我们不知道TYPE ...是否是指针!\”
我在该主题上阅读的所有内容始终如一:
无效foodbar(TYPE const&)
也一样
无效的foobar(const TYPE&)
如果我对作者的理解正确,他/他在说:
const int * X vs int * const X其中指针,X本身是const,而X指向的是const?
如果是这样,这是真的吗?
解决方法
如果TYPE是
int*
之类的#define
,则const
的位置确实很重要。在这种情况下,根据const
的位置,您将获得const int*
或int* const
。
如果TYPE是typedef或模板参数,则const
将以两种方式影响整个类型。
在我看来,这更像是另一个反对宏的论点,而不是在声明中需要某种特定的样式。
, 查看C ++ FAQ Lite(如文章所示),您从右到左阅读了指针声明。因此,如果TYPE是指针,则*的位置确实有所不同。请点击链接以获取完整的故事。
, void foobar(TYPE const&); // Pass by const reference
如果TYPE是指向ABC类型的指针,则
void foobar(ABC* const&)
与...不同
void foobar(const ABC* &)
我相信这就是作者所要表达的一切。
编辑
如果typedef是指针,这也适用
typedef SomeStruct* pSomeStruct;
void foobar(pSomeStruct* const &); // const reference to a pointer
// to a pointer to SomeStruct
void foobar(const pSomeStruct* &); // reference to a pointer
// to a const pointer to const SomeStruct