4

[basic.execution] p5 第 2 句指出:

如果语言构造被定义为产生函数的隐式调用,则语言构造的使用被认为是用于此定义目的的表达式。

但是,这句话的意图并不清楚。我最好的猜测是,它在这里是为了确保正确的排序并确保在任何隐式函数调用完成之前不会破坏临时对象,但是,我看不到这将适用并改变某些代码的含义的情况。例如:

struct S { };
const S& f() { return {}; }

在这里,return语句将被视为表达式,操作数{}也将被视为表达式,因此是return语句的子表达式。这是句子的意图吗?这还适用于哪些地方并产生有意义的影响?

4

1 回答 1

2

关键词是“in the context of this definition”,即full-expression的定义。

这只是说完整表达式的规则(例如临时生命周期)也将适用于您的整个return语句,即使它没有在构成完整表达式的事物列表中以其他方式枚举。

那是因为它涉及一个隐式函数调用(一个ctor调用);如果没有,那么这一点就没有实际意义了。

它不会“改变任何代码的含义”。

于 2019-08-11T15:48:23.503 回答