根据标准(不考虑...),以下代码是否有效 C++?
bool f(T& r)
{
if(...)
{
r = ...;
return true;
}
return false;
}
T x = (f(x) ? x : T());
众所周知,要在该项目使用的 GCC 版本中进行编译(4.1.2 和 3.2.3...甚至不让我开始...),但是should it?
Edit:我添加了一些细节,例如 f() 在概念上在原始代码中的样子。基本上,它的意思是初始化x在某些条件下。
从语法上来说是这样,但是如果你尝试这个
#include <iostream>
using namespace std;
typedef int T;
bool f(T& x)
{
return true;
}
int main()
{
T x = (f(x) ? x : T());
cout << x;
}
它输出一些随机垃圾。
但是,如果您修改
bool f(T& x)
{
x = 10;
return true;
}
然后输出10。
在第一种情况下,对象x
被声明,编译器分配一些伪任意值(所以你不初始化它),而在第二个你专门分配一个值(T()
, i.e. 0
)在声明之后,即初始化它。
我认为你的问题与这个问题类似:在初始化中使用新声明的变量(int x = x+1)? https://stackoverflow.com/questions/9820027/using-newly-declared-variable-in-initialization-int-x-x1
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)