2015-09-27 105 views
0

在C++中,據我所知,我認爲std::string不能表示沒有值。因此,如果方法返回指向std::string的指針,例如std::string *myMethod()。檢查myMethod的返回值是否爲NULL有意義嗎?檢查std:string指針的NULL值

與我的問題相關的用例如下:std :: string * method()是由gsoap存根庫從WSDL文件自動創建的。我無權訪問WSDL文件,因此我無法更改該方法的簽名。我的C++應用程序是客戶端,服務器是一個Java應用程序。這兩個應用程序都通過網絡服務進行通信

+2

是的,因爲'std :: string *'是一個指向字符串的指針,而不是'std :: string';指針可以是'nullptr'。 –

+0

Try nullptr如果函數返回一個指針,那麼可能需要一個測試 –

+3

實際上是否需要區分不存在字符串和空字符串?你的用例是什麼? –

回答

1

是的,這是有道理的。

返回類型是一個類型爲string..pointers的指針,它包含地址,它可能爲空。

在這種情況下,返回指針和空檢查是正確的方法。

如果你不想檢查null,那麼這個替代方法會被引用返回,但是這個用法很複雜,並且在用於操作符鏈接時最適合。是否適合當前用例是另一個問題本身。

Is the practice of returning a C++ reference variable, evil?

+1

參考進來的地方 –

+0

「如果你不想檢查null」......如果他確定他的當前簽名中不會有這種用例,那麼這是一種替代方案。 – basav

+0

你如何決定你是否返回一個引用或返回一個指針,什麼是折衷?該鏈接明確表示。 – basav

0

如果你的函數返回一個std::string*,您可以檢查它是否返回NULL(或更好,nullptr),因爲你不檢查字符串本身,而是一個字符串指針。

1

是的,這是有道理的。相關部分隱藏在註釋中:「method()自動創建...來自WSDL文件」。在諸如WDSL之類的基於文本的協議中,遵循「鍵值」模式,缺少密鑰在語法上與key=""空密鑰不同。通用庫不能認爲這兩者在語義上是等價的。因此它將使用return nullptr來表示沒有密鑰。