【发布时间】:2020-04-15 01:14:04
【问题描述】:
这在精神上类似于为c 询问和回答的question。那里的 cmets 暗示 c++ 的精确答案会有所不同,所以这里有一个类似的问题,适用于 c++ 中编写的代码。
下面的程序定义好了吗?
int f(int& b)
{
b = 42;
return b;
}
int a { f(a) };
对我来说似乎没问题,但另一方面,a 是如何从由函数计算的值构造的,它本身会修改 a?我对此有一种鸡与蛋的感觉,所以解释一下会很好。对于它的价值,它appears 工作。
这似乎是同一个问题,所以这里;对于类类型和基本类型,答案是否会有所不同。即下面的格式是否正确?
struct S { int i; };
S f(S& b)
{
b.i = 42;
return b;
}
S a { f(a) };
同样,不管它的价值,这个appears 也可以工作。
【问题讨论】:
-
我不确定,因此是评论而不是答案,但我的猜测可能是它始终是 UB,或者它仅适用于基本类型。
-
是的,这是合法的。 SO上有这样的问题。让我们搜索一下。
-
@DanielH 好的,在这种情况下,我已将问题编辑得更准确。
-
@S.M.那很好啊。不过我没找到。
-
我记得几个月前读过同样的问题;从内存中它曾经是合法的,但不再是 C++20
标签: c++ language-lawyer