为什么我的返回类型毫无意义?

Dyn*_*ite 11 c++ const const-correctness

我想尝试使用返回类型const MyClass * const.但是,我收到警告:

警告:#815-D:返回类型的类型限定符无意义.

这不是有效的类型吗?我想要一个无法改变的指针,我希望它指向的东西也不会改变.

Jul*_*ano 22

指针本身具有值类型,因此将其设为const是没有意义的.调用函数对返回值的作用不受被调用函数的限制.这类似于尝试定义类似的东西:

const int getInt();
Run Code Online (Sandbox Code Playgroud)

getInt(),在这种情况下,只返回一个int值(不是引用).它转到一个寄存器,然后调用函数接收它并用它做任何想做的事情.


Nic*_*dad 5

我同意Juliano的回答,你希望指针的常量位于呼叫站点.

执行所需操作的更好方法是让函数返回对象的const引用:

const MyClass& getMyClass()
{ 
  return myClass;
}
Run Code Online (Sandbox Code Playgroud)

根据定义,引用不能被修改,所以你会更好.

当然,如果您的函数试图创建 MyClass对象,这将不起作用.在这种情况下,您可以将额外的const移动到呼叫站点.

// function definition
const MyClass* createMyClass()
{ 
  return new MyClass("I Love C++");
}

// use of a const pointer to a MyClass which is const
const MyClass* const myClassInstance = creatMyClass();
Run Code Online (Sandbox Code Playgroud)