Shd*_*dNx 7 c++ scope object-lifetime language-lawyer self-reference
以下代码是否有效C++,根据标准(折扣... s)?
bool f(T& r)
{
if(...)
{
r = ...;
return true;
}
return false;
}
T x = (f(x) ? x : T());
Run Code Online (Sandbox Code Playgroud)
众所周知,在这个项目使用的GCC版本中编译(4.1.2和3.2.3 ...甚至没有让我开始...),但应该吗?
编辑:我添加了一些细节,例如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;
}
Run Code Online (Sandbox Code Playgroud)
它输出一些随机垃圾。但是,如果您修改
bool f(T& x)
{
x = 10;
return true;
}
Run Code Online (Sandbox Code Playgroud)
那么它输出 10。在第一种情况下,x声明了对象,编译器分配了一些伪任意值(因此您不初始化它),而在第二种情况下,您在声明后专门分配了一个值( T(),即),0即你初始化它。
我认为你的问题与此类似: Using new statements in iteration (int x = x+1)?
| 归档时间: |
|
| 查看次数: |
286 次 |
| 最近记录: |