我想知道两个代码之间的区别是什么。当我使用.c_str()时,它不起作用
std::vector<std::pair<std::string, std::string> >::iterator it
for(;it!=MySet.end();++it)
{
if(std::get<1>(*it).c_str()=="PAUSE") //Why it works only with std::get<1>(*it) and not with std::get<1>(*it).c_str()
{
TempDefaultVan = std::get<0>(*it).c_str();
}
}
最佳答案
std::get<1>(*it)
返回类型为std :: string的对象。此类具有重载operator ==
,以将std :: string类型的对象与字符数组进行比较。std::get<1>(*it).c_str()
返回一个字符数组。数组没有比较运算符。要比较字符数组,您应该使用标准的C函数std::strcmp
所以你可以写
if( std::strcmp( std::get<1>(*it).c_str(), "PAUSE" ) == 0 )
如果您将简单地写为
if(std::get<1>(*it).c_str()=="PAUSE")
那么编译器将比较两个指针,因为它将数组转换为指向此类表达式中第一个元素的指针。结果,如果数组占用不同的内存区域,则此表达式将始终等于false。
关于c++ - 比较字符串.c_str()和普通字符串的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21889202/