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值(不是引用).它转到一个寄存器,然后调用函数接收它并用它做任何想做的事情.
我同意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)