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++异常。