Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么不能将抛出异常的.what()方法的输出与字符串进行比较?_C++_String_Pointers_String Comparison - Fatal编程技术网

C++ 为什么不能将抛出异常的.what()方法的输出与字符串进行比较?

C++ 为什么不能将抛出异常的.what()方法的输出与字符串进行比较?,c++,string,pointers,string-comparison,C++,String,Pointers,String Comparison,由于某种原因比较失败,代码无法打印True。我不知道它是什么,但如果我将e.what()=“这里发生了不好的事情”更改为e.what()==std::string(“这里发生了不好的事情”) #包括 #包括 #包括 int main(){ 尝试 { 抛出std::runtime_错误(“这里发生了不好的事情”); } 捕获(标准::异常常量和e) { 如果(例如,what()=“这里发生了不好的事情”){ std::cout因为返回一个常量字符*,而字符串文本“是一个常量字符[N]。运算符=对它

由于某种原因比较失败,代码无法打印
True
。我不知道它是什么,但如果我将
e.what()=“这里发生了不好的事情”
更改为
e.what()==std::string(“这里发生了不好的事情”)

#包括
#包括
#包括
int main(){
尝试
{
抛出std::runtime_错误(“这里发生了不好的事情”);
}
捕获(标准::异常常量和e)
{
如果(例如,what()=“这里发生了不好的事情”){
std::cout因为返回一个
常量字符*
,而
字符串文本“
是一个
常量字符[N]
。运算符
=
对它们进行两个指针的比较。必须对它们使用
strcmp()

if (strcmp(e.what(), "Something Bad happened here") == 0) // ...
std::string
OTOH有一个
操作符==
to

如果您有C++14,那么您可以使用

但是当然,在比较之前仍然需要构造
std::string
,这比
strcmp

在C++17中有一个
std::string\u视图
,它构造起来要便宜得多,所以您可以使用它

using namespace std::literals::string_view_literals;
if (e.what() == "Something Bad happened here"sv) // ...
因为返回一个
常量字符*
,而
字符串文本“
是一个
常量字符[N]
。运算符
=
对它们进行两个指针的比较。必须对它们使用
strcmp()

if (strcmp(e.what(), "Something Bad happened here") == 0) // ...
std::string
OTOH有一个
操作符==
to

如果您有C++14,那么您可以使用

但是当然,在比较之前仍然需要构造
std::string
,这比
strcmp

在C++17中有一个
std::string\u视图
,它构造起来要便宜得多,所以您可以使用它

using namespace std::literals::string_view_literals;
if (e.what() == "Something Bad happened here"sv) // ...

what()sv
@HolyBlackCat是的,我确实看过
std::string\u view
,但我误读了它,所以我认为你不能在
std::string\u view
const char*
上做
std::string\u view(e.what())=“foo”
e.what()=“foo”sv
@HolyBlackCat是的,我确实看过
std::string\u视图
,但我看错了,所以我认为你不能在
std::string\u视图
const char*