11

我刚刚阅读了一篇关于 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
4

1 回答 1

10

我还没有阅读关于这个的实际规范,但我很确定你指出的调用在没有强制转换的情况下会是模棱两可的,因为空指针可以转换为任何类型的指针。所以演员阵容应该是必要的。

不,不幸的是,nullptr它不是模板。不过,我真的很喜欢这个想法,所以你可以考虑编写一个这样的函数:

template <typename PtrType> PtrType null() {
     return static_cast<PtrType>(nullptr);
}

然后你可以写

f(null<int*>());
于 2011-06-21T19:13:49.843 回答