gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 18:37:46 24 4
gpt4 key购买 nike

根据标准(不包括 ...),以下代码是否有效 C++?

bool f(T& r)
{
if(...)
{
r = ...;
return true;
}
return false;
}

T x = (f(x) ? x : T());

众所周知,可以在该项目使用的 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;
}

它输出一些随机垃圾。但是,如果你修改

bool f(T& x)
{
x = 10;
return true;
}

然后它输出 10。在第一种情况下,对象 x 被声明,编译器分配一些伪任意值(所以你不初始化它),而在第二种情况下你专门分配一个值(T (),即 0) 在声明之后,即你初始化它。

我认为你的问题与这个类似: Using newly declared variable in initialization (int x = x+1)?

关于C++ 使用对正在定义的变量的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23763748/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com