我刚读了一篇关于C ++ 0x标准的文章:http://www.softwarequalityconnection.com/2011/06/the-biggest-changes-in-c11-and-why-you-should-care/
它说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
答案 0 :(得分:10)
我还没有读过关于这个的实际规范,但是我很确定你指出的调用在没有强制转换的情况下是不明确的,因为空指针可以转换为任何类型的指针。所以演员阵容应该是必要的。
不,不幸的是,nullptr
不是模板。不过,我真的很喜欢这个想法,所以你可以考虑写一个像这样的函数:
template <typename PtrType> PtrType null() {
return static_cast<PtrType>(nullptr);
}
然后你可以写
f(null<int*>());