2

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

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

但是 gcc 在编译时会给出以下警告。

警告:函数返回类型上忽略类型限定符

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

4

3 回答 3

2

你得到的警告是因为决赛const被忽视了。把它拿下来,你就准备好了。

您不需要返回const指向const数据的指针,只需返回指向数据的指针const(即const Type*)。就像返回 a 没有意义一样,返回 aconst int也没有意义T* const,因为一旦将值分配给一个新变量,它const就会被丢弃。

于 2013-03-03T04:48:43.860 回答
1

const对于内置类型,顶层将被忽略。由于 C++[3.14p4] 中有一条规则:class and array prvalues can have cv-qualified types; other prvalues always have cv-unqualified types.. 在您的情况下,制作指针const Type* const的顶层将被忽略。constconst

您可以const在末尾添加:const Type * Class::Method() const {...}. 这将防止指针在成员函数内部被修改。但是,由于成员函数返回的prvalue是不可修改的,所以没有必要这样做来防止在类外修改指针成员(这也是C++中存在这条规则的原因)。当您想使用对对象等的常量引用来调用函数时,它可能很有用Class,但对于您正在做的事情,这似乎没有必要。

于 2013-03-03T04:32:56.950 回答
0

第一个 const 是对的,第二个 const 没有任何意义。看看这个例子:

const int foo();
int a = foo();

在这种情况下,如果 foo 返回 const int 或只是 int 并不会改变任何事情。与类型 * 相同。

于 2013-03-03T04:32:07.320 回答