簡體   English   中英

返回NULL而不是std :: string C ++

[英]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.

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