提问人:Myrddin Krustowski 提问时间:11/10/2022 更新时间:11/20/2022 访问量:57
声明为默认值的赋值操作是否可以具有引用限定符?
Can assignment operations which declared as default have reference qualifiers?
问:
当将赋值操作声明为 时,使它们成为引用限定以防止赋值给临时操作有什么错误吗?(大多数情况下,它可以防止愚蠢的错误)。
通用资源,不要说任何关于“默认”操作的引用限定符,到目前为止我看到的几乎每个示例都没有使用适当的 ref-qualifier 声明它们。default
语言标准是否对将赋值操作声明为默认值的引用限定符有任何说明。
- 这是允许的吗?
- 这样做有什么问题吗?毕竟,除了极少数例外,赋值是没有意义的。
- 我知道默认情况下它们没有被设置为向后兼容性的引用条件,但是有理由不这样做吗?(如果第一个问题的答案是“是”,第二个问题的答案是“否”)。
答:
1赞
Brian Bi
11/20/2022
#1
允许使用附加的 ref-qualifier 定义默认赋值运算符。请参阅 [dcl.fct.def.default]/2.1。
你是否真的应该这样做是一个基于意见的问题。我不认为添加 有什么明显的错误,但我怀疑如果你试图说服团队中的每个人都这样做,你会遇到阻力,因为它可能确实会捕获一些错误,但很少,而且几乎所有这些错误都可能在单元测试中。(相比之下,像 这样的错误,其中左侧是左值,更常见,你不会发现这些错误,但编译器可能会发出警告。&
if (x = 3)
这有点像你可能很难说服人们声明他们的变量,就好像他们知道指针不会改变一样。当然,它提高了一点安全性,但它也需要额外的打字。const char*
const char* const
评论
int x;