相关疑难解决方法(0)

为什么要将异常作为引用引用到const?

我已经多次听过和读过,最好将异常作为引用而不是引用来引用.为什么是

try {
    // stuff
} catch (const std::exception& e) {
    // stuff
}
Run Code Online (Sandbox Code Playgroud)

比...更好

try {
    // stuff
} catch (std::exception& e) {
    // stuff
}
Run Code Online (Sandbox Code Playgroud)

c++ const exception

74
推荐指数
3
解决办法
2万
查看次数

C++中异常对象的范围

C++中异常对象的范围是什么?一旦执行catch处理程序,它是否会超出范围?另外,如果我创建一个未命名的异常对象并抛出它,那么在捕获该异常时,如果我通过const引用或非const引用捕获它是否重要?

c++ scope exception-handling

39
推荐指数
2
解决办法
8340
查看次数

如果您通过引用捕获异常,是否可以修改它并重新抛出?

标准是否有关于引用捕获的异常以及尝试修改它的情况有什么说法?

请考虑以下代码:

class my_exception: public std::logic_error
{
public:
    std::vector<std::string> callstack;
};

void MyFunc()
{
    try
    {
        SomethingThatThrows();
    }
    catch (my_exception & e)
    {
        e.callstack.push_back("MyFunc");
        throw;
    }
}
Run Code Online (Sandbox Code Playgroud)

这是一个人为的例子,我实际上并没有尝试这样的事情.我只是好奇会发生什么,基于另一个线程中的建议,异常应该被const引用捕获.

c++ exception-handling exception

20
推荐指数
2
解决办法
1561
查看次数

抛出catch(...)是按值还是按引用抛出

我的老板回答了这个问题为什么......挡块中存在......(三分)?相当优雅.

但这让我想到了一些事情(希望能弥补我之前的不好问题),确实如此

catch(...){
    throw;
}
Run Code Online (Sandbox Code Playgroud)

通过(即采用深拷贝)或通过引用重新抛出捕获的异常?

c++

6
推荐指数
1
解决办法
133
查看次数

通过引用,临时,终身问题捕获异常对象

请考虑以下代码:

#include <iostream>
#include <stdexcept>

void foo()
{
    throw std::runtime_error("How long do I live?");
}

int main()
{
    try
    {
        foo();
    }
    catch (std::runtime_error& e)
    {
        std::cout << e.what() << std::endl;
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么我可以通过引用捕获异常,不是std::runtime_error("How long do I live?")rvalue?

为什么异常对象在catch块中仍然存在?

究竟抛出异常对象存储在哪里?他们的一生是几岁?

c++

5
推荐指数
2
解决办法
885
查看次数

标签 统计

c++ ×5

exception ×2

exception-handling ×2

const ×1

scope ×1