C++ 返回指向不可修改成员数组C++;gcc警告
我想返回一个指向类所拥有的数组的指针。但是,我不想允许用户修改该数据或指针。根据我的理解,您需要使用以下语法返回指向常量数据的常量指针C++ 返回指向不可修改成员数组C++;gcc警告,c++,pointers,gcc,C++,Pointers,Gcc,我想返回一个指向类所拥有的数组的指针。但是,我不想允许用户修改该数据或指针。根据我的理解,您需要使用以下语法返回指向常量数据的常量指针 const Type *const Class::Method() { return this->data_; } 但是,gcc在编译时给出以下警告 警告:在函数返回类型上忽略类型限定符 为什么gcc会提供此警告?这是什么意思?如果这不是我想要的语法,那么什么是?第一个常量是正确的,第二个常量没有任何意义。看看这个例子: const int f
const Type *const Class::Method() {
return this->data_;
}
但是,gcc在编译时给出以下警告
警告:在函数返回类型上忽略类型限定符
为什么gcc会提供此警告?这是什么意思?如果这不是我想要的语法,那么什么是?第一个常量是正确的,第二个常量没有任何意义。看看这个例子:
const int foo();
int a = foo();
在这种情况下,如果foo返回const int或just int,则不会改变任何内容。类型*相同 对于内置类型,将忽略顶级
const
。由于C++[3.14p4]中有一条规则:类和数组prvalues可以具有cv限定类型;其他PRValue始终具有cv不合格类型。
。在您的示例中,生成指针的顶级常量将被忽略
您可以将const
添加到末尾:consttype*Class::Method()const{…}
。这将防止在成员函数内修改指针。但是,由于成员函数返回不可修改的prvalue,因此不必这样做以防止在类之外修改指针成员(这也是C++中存在此规则的原因)。当您希望通过对类
对象等的常量引用来调用函数时,它可能很有用,但对于您正在执行的操作,这似乎不是必需的。您收到的警告是因为忽略了最后的常量。脱下它,你就准备好了
您不需要返回指向const
数据的const
指针,只需返回指向const
数据的指针(即const类型*
)。正如返回一个const int
没有意义一样,返回一个t*const
也没有意义,因为一旦将该值分配给一个新变量,该const
就会被丢弃。返回std::vector
不是更容易吗?我正在使用一个需要常量浮点*的C接口,出于性能方面的原因,我不想实例化std::vector。请告诉我们类型的正式定义;你的例子与这个问题无关。试着用相同的警告级别编译const int foo(){return 0;},看看它是如何无关的……我不认为const Type*Class::Method()const
应该是这个答案的一部分:这可能是正确的做法,但它与他的要求没有任何关系。(特别是因为他的代码现在似乎编译没有错误)@StephenLin:我重新编写了答案以澄清(谢谢)。