C ++ Pass by const引用语法

时间:2011-06-04 05:21:54

标签: c++ syntax reference

我知道通过引用传递和传递指针的主题被大量覆盖...很明白我理解所有的细微差别直到我读到这个:

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 ......是否是一个指针!”

我在这个主题上所读到的所有内容都一致地说:

void foodbar(TYPE const&)

也是等同的

void foobar(const TYPE&)

如果我理解作者,他/她就是这样说的:

const int * X vs int * const X其中指针,X本身是const而X指向的是const?

如果是这样,这是真的吗?

3 个答案:

答案 0 :(得分:9)

如果#define类型为int*,则const的展示位置无关紧要。在这种情况下,您将获得const int*int* const,具体取决于const的展示位置。

如果TYPE是typedef或模板参数,const将影响整个类型。

对我而言,这看起来更像是针对宏的另一个论点,而不是声明中某些特定样式的需要。

答案 1 :(得分:1)

查看the C++ FAQ Lite(如文章所示),您从右到左阅读指针声明。因此,如果TYPE是一个指针,*的位置确实有所不同。请点击完整故事的链接。

答案 2 :(得分:0)

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