gpt4 book ai didi

c++ - 检查 std::any 变量是否包含 std::string 时出现问题

转载 作者:太空宇宙 更新时间:2023-11-03 10:22:45 24 4
gpt4 key购买 nike

在 C++ 中,您可以比较两个 type_info 对象。

std::any 类。它有一个成员 .type(),它也会返回一个 type_info 对象,告诉您它包含的类型。我可以使用 typeid(THE_TYPE) 并比较两者。

以下代码有效:

std::any x = 6;

if (x.type() == typeid(int)) {
cout << "x is int";
}

但以下将不起作用:

std::any x = "string literal";

if (x.type() == typeid(std::string)) {
cout << "x is string";
}

我做错了什么?如何检查变量是否为字符串?

最佳答案

问题是,"string literal" 不是 std::string 类型,它是一个 c 风格的字符串,即 const char[15 ] 本身。而 std::any 将其作为 const char*。因此,如果您按如下方式更改条件,您将打印出 "x is string"

if (x.type() == typeid(const char*))

要解决此问题,您可以将 std::string 显式传递给 std::any

std::any x = std::string("string literal");

或者使用literal .

using namespace std::string_literals;
std::any x = "string literal"s;

关于c++ - 检查 std::any 变量是否包含 std::string 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57407303/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com