C++:在从const指针指向的对象中调用非const函数(错误C2662)

Jon*_*han 3 c++ const

我有一个带有指向对象的const指针的结构.它是const,因此指针不会改变,我不希望对象保持不变.我想在该对象中调用非常量函数,从而收到以下错误:

错误C2662:'my_namespace :: MyClass :: myFunc':无法将'this'指针从'const my_namespace :: MyClass'转换为'my_namespace :: MyClass&'

转换失去限定符

struct MyStruct
{
    MyStruct( const MyClass* init_my_class_ptr );
    const MyClass* my_class_ptr;
};

...
struct_instance.my_class_ptr->aNonConstFunc();
...
Run Code Online (Sandbox Code Playgroud)

假设我不能制造aNonConstFunc()const.

Dar*_*uuk 19

将结构更改为:

struct MyStruct
{
    MyStruct( const MyClass* init_my_class_ptr );
    MyClass* const my_class_ptr;
};
Run Code Online (Sandbox Code Playgroud)

这将使指针,而不是指针,const.

更详细的解释(也见维基百科):const关键字应用于它之前的任何内容,除非前面没有任何内容,然后它适用于它之后的内容.所以:

const A * object; // Non-const pointer to const A
A const * object; // Non-const pointer to const A
A * const object; // Const pointer to non-const A
const A * const object; // Const pointer to const A
A const * const object; // Const pointer to const A
Run Code Online (Sandbox Code Playgroud)

现在,这只是个人偏好,但这就是为什么我总是把它放在const应该做的事情之后const.当在代码中的任何地方应用时,这使得很容易弄清楚到底应该是什么const.如果在const其之前或之后适用于声明,则无需破译.