C++ 为什么三元操作失败不在试抓中咳嗽

C++ 为什么三元操作失败不在试抓中咳嗽,c++,exception,try-catch,ternary-operator,C++,Exception,Try Catch,Ternary Operator,我指的是代码。然后我修改它如下,以捕捉失败。但是代码没有捕获异常就失败了。如何处理(抓住)这次失败 #include <iostream> #include <exception> using namespace std; int main() { int test = 0; cout << "test set to 0" << endl; try { cout << (test ? "A String" : 0) <&

我指的是代码。然后我修改它如下,以捕捉失败。但是代码没有捕获异常就失败了。如何处理(抓住)这次失败

#include <iostream>
#include <exception>
using namespace std;

int main()
{
int test = 0;
cout << "test set to 0" << endl;
try {
    cout << (test ? "A String" : 0) << endl;
} catch(...) {
    cout << "Exception" << endl;
}
cout << "Test done" << endl;

return 0;
}
#包括
#包括
使用名称空间std;
int main()
{
int检验=0;

不能您的代码不会抛出任何异常,
的类型“字符串”
const char*
,因此指针和
0
可以计算为
NULL
,这意味着
测试?“字符串”:0
返回
const char*
,没有错误

另外,我认为如果您的代码有如下错误,您不知道异常是如何工作的
test?std::string{“A string”}:nullptr
,该错误将是编译时错误,而不是异常,因为编译器将无法找到这两种类型的通用类型。

C++与大多数其他语言不同,它的概念是未定义的行为。这意味着无效操作不会导致异常,而是导致崩溃、数据损坏或其他任何情况C++中的一个异常是代码显式<代码>抛出S和<代码> catch < /Cord>ES。代码中不是这样的。


(测试?“字符串”:0)的结果
const char*
。因此
0
被转换为
const char*
,即空指针。标准库有一个for
运算符,常用类型是指针,取消引用空指针会导致未定义的行为,而不是异常。如果它崩溃,则是因为不同的较低级别EL“异常”,不是C++异常。