nullptr 的强类型?

发布于 2024-11-16 21:34:48 字数 710 浏览 7 评论 0 原文

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

I just read an article on the C++0x standard: http://www.softwarequalityconnection.com/2011/06/the-biggest-changes-in-c11-and-why-you-should-care/

It said nullptr was strongly typed, meaning that it can be distinguished from an integer 0.

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

f(nullptr); // calls char* version

That's all good, but I'm interesting in knowing what the standard says about nullptr with two pointer functions:

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

f(nullptr);

Do I need a cast here? And is nullptr templated?

f((int*)(nullptr);
f(static_cast<int*>(nullptr));
f(nullptr<int>);               // I would prefer this

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

雨落星ぅ辰 2024-11-23 21:34:48

我还没有读过这个的实际规范,但我很确定,如果没有强制转换,您指示的调用将是不明确的,因为空指针可以转换为任何类型的指针。所以演员阵容应该是必要的。

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

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

然后你可以写

f(null<int*>());

I haven't read the actual spec on this one, but I'm pretty sure that the call you indicated would be ambiguous without a cast, since a null pointer can be converted to a pointer of any type. So the cast should be necessary.

And no, unfortunately, nullptr is not a template. I really like that idea, though, so you could consider writing a function like this one:

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

And then you could write

f(null<int*>());
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文