在c ++中,您可以比较两个type_info对象。
有std::any班。它具有一个成员.type(),该成员还将返回一个type_info对象,告诉您其包含的类型。我可以使用typeid(THE_TYPE)并比较两者。
以下代码有效:
std::any x = 6;
if (x.type() == typeid(int)) {
cout << "x is int";
}
Run Code Online (Sandbox Code Playgroud)
但是以下操作无效:
std::any x = "string literal";
if (x.type() == typeid(std::string)) {
cout << "x is string";
}
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?如何检查变量是否为字符串?
问题是,"string literal"不是type std::string,而是c风格的字符串,即const char[15]本身。并将std::any其作为const char*。因此,如果您按以下方式更改条件,您将被"x is string"打印出来。
if (x.type() == typeid(const char*))
Run Code Online (Sandbox Code Playgroud)
要解决此问题,您可以将传递std::string给std::any。
std::any x = std::string("string literal");
Run Code Online (Sandbox Code Playgroud)
或使用文字。
using namespace std::string_literals;
std::any x = "string literal"s;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
69 次 |
| 最近记录: |