gpt4 book ai didi

c++ - 未捕获派生异常类

转载 作者:太空宇宙 更新时间:2023-11-04 14:19:33 24 4
gpt4 key购买 nike

开始使用googletest ASSERT_THROW 子句,似乎'有时'处理抛出异常的基类型。我将相关代码部分缩减为:

// myexception.h
struct myexception : public std::logic_error {
myexception(const char* what):std::logic_error(what){}
};
void throwMy();

// myexception.cpp
void throwMy(){ throw myexception(NULL); }

这是我的测试代码:

//
void localThrowMy(){ throw myexception(""); }

// test code, based upon the ASSERT_THROW macro
try {
throwMy(); // outputs "logic_error"
//localThrowMy(); // would output "what I expected"
}
catch( myexception & ) { cout << "what I expected"; }
catch( std::logic_error & ) { cout << "logic_error"; } // my addition
catch(...) { cout << "mmmh."; }

奇怪的是:如果我在与测试代码相同的编译单元中声明throwMy 函数,则输出“what I expected”。如果它在另一个单元中,则测试输出“logic_error”。

  • g++ --version: (Debian 4.4.5-8) 4.4.5
  • ld --version:(Debian 的 GNU Binutils)2.20.1-system.20100303

这段代码是否正确?链接器可能在这里出错了吗?

最佳答案

std::logic_error 构造函数接收一个 std::string& 作为参数,而不是 const char *。所以传递 NULL 是未定义的行为。

考虑为 myexception 使用 std::string&

关于c++ - 未捕获派生异常类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8712274/

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