簡體   English   中英

c_str ==字符串與c_str == c_str的值相等

[英]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與帶有strcmpstd::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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM