types - nullptr 的强类型化?

标签 types c++11 nullptr

刚刚看了一篇关于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);

我这里需要 Actor 吗?并且是 nullptr模板化?
f((int*)(nullptr);
f(static_cast<int*>(nullptr));
f(nullptr<int>);               // I would prefer this

最佳答案

我还没有阅读有关此规范的实际规范,但我很确定您指出的调用在没有强制转换的情况下会不明确,因为空指针可以转换为任何类型的指针。所以 Actor 阵容应该是必要的。

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

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

然后你可以写
f(null<int*>());

关于types - nullptr 的强类型化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6430693/

相关文章:

c++ - 为什么指向 int 的指针转换为 void* 而指向函数的指针转换为 bool?

linux - 是否可以仅针对某些特定的 C++11 代码段 {activate|de-activate} SIGFPE 生成?

c++ - 模板元编程 : Sum of 1 to n

c++ - 如何正确使用 nullptr?

c++ - 模板:获取类型并映射到函数

c++ - 对象类型错误

c - 在 C 中打印时间 (0) 的格式说明符

c++ - 手动删除函数返回的指针

c++ - 什么是 "Read Access Violation... was nullptr"?

list - 从类型列表haskell中删除类型