为什么 C++ 标准明确指出,对于内置赋值运算符,没有引入左操作数的临时值?

Why the C++ standard explicitly says that for built-in assignment operators, no temporaries for left operand are introduced?

提问人:Jan Tušil 提问时间:4/10/2017 最后编辑:CommunityJan Tušil 更新时间:4/10/2017 访问量:82

问:

C++ 标准明确指出,对于内置赋值运算符,不会引入左操作数的临时值。但是,我认为没有必要。引自 N4296 §13.3.1.2/4:

对于内置赋值运算符,左操作数的转换 限制如下:

(4.1) — 没有引入临时操作数来保持左操作数,并且

(4.2) — 不对左操作数应用用户定义的转换,以实现与最左边操作数的类型匹配 内置候选参数的参数。

我理解第二条规则(参见示例 https://stackoverflow.com/a/39937432/6209703),但第一条规则对我来说似乎是荒谬的。§13.6 中描述了所有内置运算符,并且只有三个赋值运算符(第 18、19、20 段)。它们的第一个参数始终是对非常量类型的引用,并且此类引用不能绑定到临时类型。

C++ 语言律师 赋值运算符

评论


答: 暂无答案