我想做一个类noncopyable
的实例,也就是说,确保特定类的实例只能作为副本传递 而不是参考。如果任何函数试图通过引用接收它,我希望它给出编译错误(理想情况下)或运行时错误。
我不认为私有operator &
会这样做,有没有合法的方法来做到这一点。
答案 0 :(得分:20)
那是不可能的。任何命名变量都可以绑定到相应类型的引用变量。这就是语言的运作方式。
特别是,您的限制永远不会有复制构造函数,因此您无法实际按值传递对象!
答案 1 :(得分:6)
我不认为制作运营商&私人会这样做,有没有合法的方式来做到这一点。
不,因为您在函数签名中用于传递引用的&
不是运算符。您正在谈论运算符地址(一元)或按位运算符(二进制)。所以它与传递引用无关。
无法禁止类型的传递引用。
我怀疑你的动机是否足以做到这一点,而你似乎对传递机制的理解不足:
如果任何函数试图通过引用接收它,我希望它给出编译错误(理想情况下)或运行时错误。
函数通过引用或值传递参数。这是由它的声明决定的,我认为你的困惑源于此。例如:
void foo(X x);
按值获取参数x
。没有办法通过引用传递它。没门。同样地:
void foo(X& x)
通过引用获取它,它总是会。