gpt4 book ai didi

c++ - throw 和捕捉整数是如何工作的?

转载 作者:行者123 更新时间:2023-12-03 22:18:44 25 4
gpt4 key购买 nike

使用此代码:

int main()
{
try
{
throw -1;
}
catch (int& x)
{
std::cerr << "We caught an int exception with value: " << x << std::endl;
}
std::cout << "Continuing on our merry way." << std::endl;

return 0;
}

我们有:
/tmp$ ./prorgam.out
Continuing on our merry way
We caught an int exception with value: -1
catch怎么办块读取 -1int& ?我们无法为非常量左值引用赋值。

为什么是第二个 std::cout在第一个 std::cerr 之前执行的语句陈述?

最佳答案

这没关系,因为 [except.throw]/3

Throwing an exception copy-initializes ([dcl.init], [class.copy.ctor]) a temporary object, called the exception object. An lvalue denoting the temporary is used to initialize the variable declared in the matching handler ([except.handle]).



强调我的

如您所见,即使它是临时的,编译器也将其视为用于初始化处理程序的左值。因此,您不需要 const 引用。

关于c++ - throw 和捕捉整数是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59412118/

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