gpt4 book ai didi

c++ - 打印未初始化的引用给出 1. 为什么?

转载 作者:行者123 更新时间:2023-11-30 01:55:50 33 4
gpt4 key购买 nike

这是我之前问题 Why is my exception still being thrown after being caught? 的后续问题

我有一个类 S 的引用数据成员 r,它试图用函数调用 f 的结果进行初始化。 f 抛出,所以我设置了一个 try-catch block 。我不希望 r 被赋予一个值,因为在函数返回之前抛出了异常。但是当我在 catch block 中打印出 r 时,结果是 1

#include <iostream>
#include <stdexcept>

int& f() { throw std::invalid_argument("invalid"); static int i(50); return i; }

struct S
{
S()
try : r(f())
{ }
catch(...)
{
std::cout << r;
}
int& r;
};

int main()
{
try { S s; } catch(...) { }
}

输出:

1

我不知道为什么我得到 1 而不是随机值或 0 就像常规变量。 1 是标准强制要求的结果还是这只是未定义的行为?我真的很想知道。谢谢。

最佳答案

由于 r 从未被初始化,因为要对其进行初始化的函数会抛出异常,因此您正在打印未初始化的引用,这将是未定义的行为。

关于c++ - 打印未初始化的引用给出 1. 为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20360510/

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