Kry*_*n S 5 c++ language-lawyer full-expression
如果定义语言构造来生成函数的隐式调用,则出于此定义的目的,语言构造的使用被视为表达式。
然而,这句话的意图尚不清楚。我最好的猜测是,它在这里是为了确保正确的排序并确保在任何隐式函数调用完成之前不会破坏临时变量,但是,我看不到这种情况会适用并改变某些代码的含义。例如:
struct S { };
const S& f() { return {}; }
Run Code Online (Sandbox Code Playgroud)
在这里,return语句将被视为表达式,操作数{}也将被视为表达式,因此是return语句的子表达式。这就是这句话的本意吗?这还能适用于哪些地方并产生有意义的影响?
关键短语是“在这个定义的上下文中”,即完整表达的定义。
这只是说,完整表达式的规则(例如临时生命周期)也将适用于整个语句,即使它没有在构成完整表达式的return事物列表中枚举。
那是因为它涉及隐式函数调用(构造函数调用);如果没有,那么这一点就没有意义了。
它不会“改变任何代码的含义”。