我想返回一个指向类拥有的数组的指针。但是,我不想让用户修改该数据或指针。根据我的理解,您需要使用以下语法返回一个指向常量数据的常量指针。
const Type *const Class::Method() {
return this->data_;
}
但是 gcc 在编译时会给出以下警告。
警告:函数返回类型上忽略类型限定符
为什么 gcc 会提供此警告?这是什么意思?如果这不是我想要的正确语法,那是什么?
你得到的警告是因为决赛const
被忽视了。把它拿下来,你就准备好了。
您不需要返回const
指向const
数据的指针,只需返回指向数据的指针const
(即const Type*
)。就像返回 a 没有意义一样,返回 aconst int
也没有意义T* const
,因为一旦将值分配给一个新变量,它const
就会被丢弃。
const
对于内置类型,顶层将被忽略。由于 C++[3.14p4] 中有一条规则:class and array prvalues can have cv-qualified types; other prvalues always have cv-unqualified types.
. 在您的情况下,制作指针const Type* const
的顶层将被忽略。const
const
您可以const
在末尾添加:const Type * Class::Method() const {...}
. 这将防止指针在成员函数内部被修改。但是,由于成员函数返回的prvalue是不可修改的,所以没有必要这样做来防止在类外修改指针成员(这也是C++中存在这条规则的原因)。当您想使用对对象等的常量引用来调用函数时,它可能很有用Class
,但对于您正在做的事情,这似乎没有必要。
第一个 const 是对的,第二个 const 没有任何意义。看看这个例子:
const int foo();
int a = foo();
在这种情况下,如果 foo 返回 const int 或只是 int 并不会改变任何事情。与类型 * 相同。