[英]return NULL instead of std::string C++
我有這個功能:
std::string SWindows::PRecv(int rc, std::string* ip);
在這個函數中,在某些情況下我返回NULL並且代碼編譯(IDE:VS 2012)。 對我來說,NULL它不是一個std :: string對象所以我們不能寫它。
那么為什么在函數返回std :: string時返回NULL是正確的呢?
值NULL
相當於0
C ++和0
是完全有效的char const*
恆定。 字符串類有一個非explicit
構造函數,它采用char const*
,即編譯器將編譯代碼但它不起作用:即,雖然編譯器排除了代碼,但它是未定義的行為。
看一下C ++ 11中的定義,我沒有看到delete
d重載采用std::nullptr_t
,也就是說,它也會在從nullptr
轉換時編譯。 我希望有一個delete
d重載采用std::nullptr_t
,這將允許編譯器捕獲這種情況,至少在傳遞nullptr
。
你正在做的是從char const*
等於0
(或NULL
)構造一個std::string
。
這標准實際上是禁止的:
[C++11: 21.4.2/9]
要求:s
不應為空指針
但是,GCC對你來說是非常好的,並且會進行檢查以使其成為無操作 。 它不是必須的,你不應該依賴於此。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.