为什么C++不允许在复制ctor中进行非const到const的转换?

jke*_*eys 2 c++ const copy-constructor

我有两个吸气成员:

Node* prev() { return prev_; }
int value()  { return value_ }
Run Code Online (Sandbox Code Playgroud)

请注意缺少const标识符(我忘了它们,但现在我想知道为什么这不起作用).我想把它编译成:

Node(Node const& other) : prev_(other.prev()), value_(other.value()) { }
Run Code Online (Sandbox Code Playgroud)

编译器拒绝这一点.我认为C++允许在函数参数中进行非const到const转换,例如:

{
   Foo(int bar);
}

Foo(const int bar)
{
   //lala
}
Run Code Online (Sandbox Code Playgroud)

为什么它不允许我用复制构造函数做同样的事情?const标识符意味着我保证不会改变任何东西,那么为什么我从const或非const源获取我的值呢?

Jar*_*Par 14

你不是试图进行非const到const的转换.您试图调用两个不是const的const方法(调用prev和value).const语义严格禁止这种类型的操作.

你可以做的是直接使用字段prev_和value_.因为它是相同类型的成员,所以您可以访问const对象上可用的私有.