我想返回一个指向类拥有的数组的指针。但是,我不想让用户修改该数据或指针。根据我理解的方式,你需要使用以下语法返回一个指向常量数据的常量指针。
const Type *const Class::Method() {
return this->data_;
}
然而,gcc在编译时会发出以下警告。
警告:在函数返回类型
上忽略类型限定符
为什么gcc会提供此警告?这是什么意思?如果这不是我想要的正确语法,那是什么?
答案 0 :(得分:2)
您收到的警告是因为最终的const
被忽略了。把它取下然后你就定了。
您无需返回const
指向const
数据的指针,只需指向const
数据(const Type*
)的指针。正如返回const int
没有意义一样,返回T* const
没有意义,因为只要将值分配给新变量,{{1}被丢弃了。
答案 1 :(得分:1)
内置类型会忽略顶级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
对象等的常量引用来调用函数时,它可能很有用,但是对于你正在做的事情,这似乎没有必要。
答案 2 :(得分:0)
第一个const是对的,第二个const没有任何意义。看看这个例子:
const int foo();
int a = foo();
如果foo返回const int或只是int这个事实在这种情况下不会改变任何东西。类型*相同。