我有一个用户用来与系统交互的类。这个类使用 Pimpl 来隐藏它的内部,所以它唯一的实际成员是对完成所有工作的真实隐藏对象的引用。
因为类具有引用语义,所以它通常像指针一样按值传递。这会导致const
正确性问题。您可以通过简单地将一个值复制到一个非值中来非常容易地打破const
类的性质。没有办法避免这种情况,而不是完全防止复制。const
const
我希望能够返回const
这些值,这保留const
了对象的性质。无需创建新类或其他东西。
基本上我想阻止这个工作:
struct Ref
{
int &t;
Ref(int &_t) : t(_t) {}
};
Ref MakeRef(int &t) { return Ref(t); }
int main()
{
int foo = 5;
const Ref r(foo);
const Ref c(r); //This should be allowed.
Ref other = MakeRef(foo); //This should also be allowed.
Ref bar(r); //This should fail to compile somehow.
return 0;
}
毕竟,如果我直接这样做,它将无法工作:
int &MakeRef(int &t) {return t;}
int main()
{
int foo = 5;
const int &r(foo);
const int &c(r); //This compiles.
int &other = MakeRef(foo); //This compiles.
int &bar(r); //This fails to compile.
return 0;
}