为什么“const”不会导致编译错误

时间:2014-05-07 21:21:07

标签: c++ const smart-pointers unique-ptr

我不确定我是否理解这是怎么回事:

#include <memory>
#include <iostream>
using namespace std;

void f(const unique_ptr<int> &p){
    *p = 10; // no error here
}
int main(){
    unique_ptr<int> p (new int);
    *p = 0;
    cout << *p << endl;  // 0
    f(p);
    cout << *p << endl;  // 10 ??
    return 0;
}

我期望编译器错误,因为函数参数是const,但同样,它被绕过并且值已被更改。为什么呢?

当然,如果我使用它:

 void f(const int* p){
    *p = 10;
}

f(p.get());

然后我得到预期的编译器错误。

1 个答案:

答案 0 :(得分:4)

您正在引用指针const,而不是它指向的内容。