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