我意識到下面的GCC 4.7編譯罰款:我可以將0分配給shared_ptr嗎?爲什麼?
#include <memory>
int main() {
std::shared_ptr<int> p;
p = 0;
}
但是,從int
或int*
沒有賦值運算符,並有從任int
或int*
要麼沒有隱式構造函數。有一個來自int*
的構造函數,但那個是明確的。我檢查了標準庫的實現,並且構造器確實是明確的,並且沒有看到任何可疑的賦值操作符。
該程序是否實際上格式良好或是GCC與我混淆?
'0'是特殊文字,它轉換爲'nullptr_t' – Abyx 2012-08-09 17:18:00
@LucDanton這是因爲g ++非常聰明,並且將'42 - 42'轉換爲'0'。在Clang,IIRC發生了同樣的事情(發生了?),在GN2012 – Abyx 2012-08-09 17:20:35
@Abyx上提到過,你錯過了這一點 - '0'沒有特別的處理作爲該語言的文字。 – 2012-08-09 17:25:07