Types nullptr的强类型?

Types nullptr的强类型?,types,c++11,nullptr,Types,C++11,Nullptr,我刚刚读了一篇关于C++0x标准的文章: 它说,nullptr是强类型的,这意味着它可以与整数0区分开来 f(int); f(char* p); f(nullptr); // calls char* version 这很好,但我很有兴趣了解标准中关于使用两个指针函数的nullptr的说明: f(char* p); f(int* p); f(nullptr); 我需要石膏吗?nullptr是否已模板化 f((int*)(nullptr); f(static_cast<int*>

我刚刚读了一篇关于C++0x标准的文章:

它说,
nullptr
是强类型的,这意味着它可以与整数0区分开来

f(int);
f(char* p);

f(nullptr); // calls char* version
这很好,但我很有兴趣了解标准中关于使用两个指针函数的
nullptr
的说明:

f(char* p);
f(int* p);

f(nullptr);
我需要石膏吗?
nullptr
是否已模板化

f((int*)(nullptr);
f(static_cast<int*>(nullptr));
f(nullptr<int>);               // I would prefer this
f((int*)(nullptr);
f(静态_-cast(nullptr));
f(nullptr);//我更喜欢这个

我还没有读过关于这一点的实际规范,但我非常确定,如果没有强制转换,您所指示的调用将是不明确的,因为空指针可以转换为任何类型的指针。因此强制转换应该是必要的

<>和不,不幸的是<代码> null ptr>代码>不是模板。不过,我真的很喜欢这个想法,所以你可以考虑写一个这样的函数:

template <typename PtrType> PtrType null() {
     return static_cast<PtrType>(nullptr);
}
模板PtrType null(){
返回静态_cast(nullptr);
}
然后你就可以写了

f(null<int*>());
f(null());

你应该是标准委员会的成员!这是干净的、好的语法……再过50年,我相信它会在那里!@Dov-我对旧的
f((int*)0的改进不是很满意
。我猜这是委员会考虑的。@Bo Persson-我认为这里真正的优势是,虽然您仍然必须将空指针转换为正确的指针类型,但不会有意外调用整型而非指针类型重载的函数的风险。这也意味着您可以拥有一个可解释的函数在
nullptr\u t
上不停地重载,这似乎确实有一些用途。@templatetypedef-我对
nullptr
nullptr\u t
上的重载印象深刻。这只是
null()
的实用程序没有压倒性的作用-抱歉:-,我个人会这样做
template PtrType*null(){return nullptr;}
,因为它使使用更加简洁。将
nullptr
强制转换为与强制转换
NULL
不同的任何指针类型后,在这两种情况下都会得到一个新的目标类型。