我不确定我是否理解这是怎么回事:
#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());
然后我得到预期的编译器错误。
答案 0 :(得分:4)
您正在引用指针const,而不是它指向的内容。