【发布时间】:2021-12-17 17:10:45
【问题描述】:
以下程序抛出nullptr,然后将异常捕获为int*:
#include <iostream>
int main() {
try {
throw nullptr;
}
catch(int*) {
std::cout << "caught int*";
}
catch(...) {
std::cout << "caught other";
}
}
在 Clang 和 GCC 中,程序成功打印 caught int*,演示:https://gcc.godbolt.org/z/789639qbb
但是在 Visual Studio 16.11.2 中,程序会打印出caught other。这是 MSVC 中的错误吗?
【问题讨论】:
-
除了测试编译器是否符合 C++ 标准,为什么还有人想要到
throw nullptr;? -
@dan04 因为这很容易?与
throw 0;或throw "bug";相同。又快又脏。 (很脏。) -
@dan04:因为我们可以!该语言提供了该功能,那么为什么不使用它呢?我也喜欢写
volatile const unsigned const long unsigned int volatile long x = 5;,因为它会让下一个开发者反思 C++ 是否真的是正确的语言:-)
标签: c++ exception language-lawyer