我有以下代碼段,它分配了nullptr
到bool
類型。將`nullptr`分配給`bool`類型。哪個編譯器是正確的?
#include <iostream>
int main()
{
bool b = nullptr;
std::cout << b;
}
在鐺3.8.0工作的罰款。它給出了一個輸出0
。 Clang Demo
但G ++ 5.4.0給出一個錯誤:
source_file.cpp: In function ‘int main()’:
source_file.cpp:5:18: error: converting to ‘bool’ from ‘std::nullptr_t’ requires direct-initialization [-fpermissive]
bool b = nullptr;
哪個編譯器是正確的?
你鏈接的實時編譯器在運行它時我得到一個編譯器警告。 「警告:將nullptr常量隱式轉換爲'bool'[-Wullull-conversion]」 – UnholySheep
根據GCC(和MSVC)給出的錯誤和[reference]部分(http://en.cppreference.com/ w/cpp/language/implicit_conversion)我會說這是標準所不允許的(並且Clang允許它作爲擴展名) – UnholySheep
它應該不錯。 'nullptr'的一個要點是使用布爾上下文中的指針來定義一個明確的事情。 : - /但是,我可以看到如何以這種轉讓的形式警告直接轉化可能是正確的。當你有'nullptr && true'而不是'nullptr'時,編譯器是否仍然出錯? – Omnifarious