我需要在C++上編寫我自己的哈希映射。它有一個方法.get(「some_string」)如果這個字符串不在我的hash_map我返回NULL。但我不能檢查我的程序,如果這個函數返回NULL或字符串。這是我的代碼:在成本字符串和函數中返回NULL
if (m.get("some_string"))
cout << m.get("some_string");
和方法:
const string& Map::get(const string& s) {
string_node* pos = find_pos(s);
if (pos)
return pos->val;
else
return NULL;
}
POS-> VAL只是一個字符串。所以我有一個錯誤,我不能從常量字符串轉換爲布爾。 問題是我需要做的,爲了防止cout
中的錯誤,我的函數返回NULL
。我如何檢查它?
當你返回NULL時,你在這裏得到未定義的行爲。該函數必須構造一個「string」對象來返回,它使用'NULL'作爲'string'構造函數的參數。這調用'string'的'char *'構造函數,它有一個不傳遞空指針的前提條件。因此,您因違反先決條件而得到UB。另外,你應該得到關於返回一個本地對象的引用的警告,這將返回一個懸而未決的引用。您應該在啓用警告的情況下進行編譯,並且您應該注意所獲得的警告。 – bames53 2014-10-27 17:23:39
@ bames53我認爲NULL被定義爲0,並且字符串沒有隱含的構造函數來取整數,所以甚至不會編譯。 – 2014-10-27 17:31:10
@ bames53當我寫'return'「'的時候,我有一個警告,但是當我寫'return NULL'時沒有任何警告。它編譯時,當我在'find_pos'變量中返回'NULL'時,'pos'爲'0',所以我可以寫'if(pos)' – PepeHands 2014-10-27 17:31:54