Kno*_*abe 16 c++ nullptr implicit-conversion c++11
总结:nullptr转换为bool,bool转换为int,为什么不nullptr转换为int?
这段代码没问题:
void f(bool);
f(nullptr); // fine, nullptr converts to bool
Run Code Online (Sandbox Code Playgroud)
这没关系:
bool b;
int i(b); // fine, bool converts to int
Run Code Online (Sandbox Code Playgroud)
那么为什么这不行呢?
void f(int);
f(nullptr); // why not convert nullptr to bool, then bool to int?
Run Code Online (Sandbox Code Playgroud)
Mur*_*los 29
因为这正是主要的想法nullptr.
nullptr 是为了避免这种行为:
struct myclass {};
void f(myclass* a) { std::cout << "myclass\n"; }
void f(int a) { std::cout << "int\n"; }
// ...
f(NULL); // calls void f(int)
Run Code Online (Sandbox Code Playgroud)
如果nullptr可以转换为int这种行为会发生.
所以问题是" 它为什么可以转换为 bool?".
Syntax- "suggarness":
int* a = nullptr;
if (a) {
}
Run Code Online (Sandbox Code Playgroud)
哪个看起来好于:
if (a == nullptr) {
}
Run Code Online (Sandbox Code Playgroud)
Set*_*gie 18
在标准的§4.1中,它说明了如何执行转换:
标准转化是具有内置含义的隐式转化.第4条列举了全套此类转换.标准转换序列是一系列标准转换,顺序如下:
- 来自以下集合的零或一次转换:左值到右值的转换,数组到指针的转换以及函数到指针的转换.
- 来自以下集合的零或一次转换:整数促销,浮点促销,积分转换,浮点转换,浮点积分转换,指针转换,成员转换指针和布尔转换.
- 零或一个资格转换.
因此,编译器仅对上述每种类型的转换中的某些,无或全部进行"零或一次转换",而不是任意多次.这是一件非常好的事情.