1 c++ string equality libpqxx c-str
我正在尝试比较libpqxx c_str值.
如果我尝试直接比较它们,result1[0][0].c_str() == result2[0][0].c_str()例如,return true当它们具有相同的字符串值时,它们不会.正确比较它们的唯一方法是使用strcmp.
但是,如果我比较一个libpqxx c_str到std::string用strcmp时,编译器抱怨的参数strcmp不能是std::string的,但最奇怪的是所有的对我说:如果我比较像result1[0][0].c_str() == some_std_string,比较将return true它们是否具有相同的值,false否则.
为什么是这样?这是libpqxx特有的吗?如果不是,这是标准行为吗?
它发生是因为std::string是一个类,而const char*(返回的类型c_str)是一个指针类型.true如果指针指向相同的内存位置,则比较指针会返回.另一方面,类可以定义平等对它们意味着什么.
由于strings和const char*相当类似,因此string该类定义了一种将字符串对象与const char*指针进行比较的方法.它还定义了如何将char指针转换为字符串.但是,这基本上是单向的,因为它没有定义如何const char*使用纯粹的运算符或隐式转换从字符串创建.这就是你不能使用strcmp它们的原因.
Strcmp是C标准库中的函数.C没有类,类型不能定义像C++类那样的基本行为.因此,C定义了一堆函数来处理char指针和char指针.
char指针和字符串之间的这种不一致不仅限于相等.例如,std::string支持与+运算符串联:这意味着string + string工作,const char* + string工作,string + const char*工作,但会const char* + const char*导致编译时错误,因为指针不定义此类操作.
| 归档时间: |
|
| 查看次数: |
2119 次 |
| 最近记录: |