【发布时间】:2013-04-25 11:40:53
【问题描述】:
我和一位同事正在争论 const 或 reference 成员是否是正确的做法。 const 和 reference 成员使类不可复制和不可移动,除非您编写自己的忽略引用或 const 成员的复制和移动运算符。我找不到仅仅因为它们是引用或 const 而忽略复制或移动某些成员的情况。
我认为拥有一个不可移动的对象在逻辑上很少是合理的,并且这个选择只与类是否为location invariant 有关。不可复制的对象更为常见,但是使类不可复制的选择与它是否拥有逻辑上不可复制的资源,如果它代表唯一的所有权等有关。我想不出唯一的原因是否具有引用或 const 成员意味着类应该具有这些特征中的任何一个(不可复制或不可移动)
应该使用它们吗?应该是一个而不是另一个?有哪些例子?
【问题讨论】:
-
我不认为他们使类不可复制或不可移动;它不能被复制/移动到,,但它肯定可以被复制/移动。它更像是“不可分配”而不是“不可复制”。
-
我发现引用成员对于函数对象之类的东西非常有用。
-
关于不可移动物体的好奇陈述。我会说通常没有理由使对象可移动。当然,实体对象永远不应该是可移动的,因为它们永远不会作为临时对象出现。并且使具有值语义的对象可移动是一种优化,它不一定适用于许多类型,并且意味着可移植性的重大损失(至少在今天),并增加了复杂性。事实上,我认为只有在分析器说你需要它时才应该使用可移动的。
-
我赞同 Vaughn Cato 的声明。
标签: c++ reference constants const-correctness