[英]Value equality of c_str == string vs c_str == c_str
我正在嘗試比較libpqxx c_str
值。
例如,如果我嘗試直接比較它們,則result1[0][0].c_str() == result2[0][0].c_str()
,當它們具有相同的字符串值時,它們不會return true
。 正確比較它們的唯一方法是使用strcmp
。
但是,如果我將libpqxx c_str
與帶有strcmp
的std::string
進行比較,則編譯器會抱怨strcmp
的參數不能為std::string
,但對我而言最奇怪的是:如果我比較諸如result1[0][0].c_str() == some_std_string
,如果比較具有相同的值,則比較將return true
,否則return true
false
。
為什么是這樣? 這是libpqxx特有的嗎? 如果不是,這是標准行為嗎?
發生這種情況是因為std::string
是一個類,而const char*
( c_str
返回的類型)則是指針類型。 如果指針指向相同的內存位置,則比較指針將返回true
。 另一方面,類可以定義相等對它們意味着什么。
由於string
s和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*
導致編譯時錯誤,因為指針沒有定義這種操作。
只需使用c_str()
!
if (strcmp(result1[0][0].c_str(), some_std_string.c_str()) == 0)
{
...
或使用std::string
operator ==
if (result1[0][0].c_str() == some_std_string)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.