C++使用对正在定义的变量的引用

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.

vso*_*tco 2

从语法上来说是这样,但是如果你尝试这个

#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 次

最近记录:

10 年,2 月 前