将指针返回到不可修改的成员数组C ++ gcc警告

时间:2013-03-03 04:26:40

标签: c++ pointers gcc

我想返回一个指向类拥有的数组的指针。但是,我不想让用户修改该数据或指针。根据我理解的方式,你需要使用以下语法返回一个指向常量数据的常量指针。

const Type *const Class::Method() {
    return this->data_; 
}

然而,gcc在编译时会发出以下警告。

  

警告:在函数返回类型

上忽略类型限定符

为什么gcc会提供此警告?这是什么意思?如果这不是我想要的正确语法,那是什么?

3 个答案:

答案 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这个事实在这种情况下不会改变任何东西。类型*相同。