gpt4 book ai didi

c++ - 不同typeid的if语句

转载 作者:行者123 更新时间:2023-12-02 10:03:29 26 4
gpt4 key购买 nike

我目前正在编写代码,并且尝试对从带有基本字符串的.txt文件中获取的变量使用if语句。它应该看起来像

if (a.variable == "string") {}

当我使用
std::cout << a.variable << std::endl;
std::cout << "string" << std::endl;

我得到相同的结果,但是当使用
std::cout << typeid(a.variable).name() << std::endl;
std::cout << typeid("string").name() << std::endl;

我得到不同的结果:

NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE



A5_c。

这可能是if陈述失败的原因吗?除非我不正确,否则第一个typeid代表基本字符串。
感谢您的投入!

我用来阅读的代码如下:
std::string::size_type beginoption = section.find("=",position); 
beginoption = beginoption +1;
std::string::size_type endoption = section.find("\n",position);
optionstorage = section.substr(beginoption, endoption - beginoption);

最佳答案

C++中的两个对象不必具有相同的类型即可相等地进行比较。您可以将字符串对象与字符串文字进行比较,因为存在operator==重载,它接受std::stringchar const *参数。 (typeid()运算符返回一个不同的值,因为两个表达式具有不同的类型;一个是字符串对象,另一个是char数组-但实际上您仍然可以比较它们。)

您提到您的“if语句失败”,但是当您检查字符串的内容时,它们看起来是相同的-它们实际上可能是不同的。例如,在您的代码中,如果a.variable带有尾随空格,则您不会在输出中看到此内容,但字符串也将不相等。

尝试写两个字符串并用一些字符包围。我怀疑您会看到某处有一些额外的空格:

std::cout << '[' << a.variable << ']' << std::endl;
std::cout << '[' << "string" << ']' << std::endl;

考虑还显示 a.variable.size()。如果不是6,则这两个字符串不能相等,因为它们的长度不同。

关于c++ - 不同typeid的if语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61369634/

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