问题标签 [nullptr]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - nullptr 不是特殊关键字和 std::nullptr_t 的对象吗?
可能重复:
nullptr 到底是什么?
我首先认为这是一个关键字。我现在的 gcc 并没有nullptr
以不同的阴影突出显示。为了验证这一点,我写了以下内容:
所以我从错误中得到了一些线索:
错误:从“std::nullptr_t”类型的右值初始化“void*&”类型的非常量引用无效</p>
如果nullptr
是一个对象,那么它真的是一个相当于 simple 的指针0
吗?换句话说,假设我写:
上面的语句是否不会改变我的代码中的任何内容?此外,了解std::nullptr_t
类型的其他用例也会很有趣。
c++ - NULL 是否在 C++11 中定义为 nullptr?
C++11 实现会定义NULL
为nullptr
?
这会由新的 C++ 标准规定吗?
c++ - 在 API 函数调用中使用 nullptr?
在 Visual Studio 2010 中使用 C++。我正在将我NULL
的 's 转换为nullptr
's。使用我的代码,这很好。但是,如果我调用 WINAPI,例如:
通常我会这样称呼它:
我可以安全地使用nullptr
我会NULL
在这样的电话中使用的地方吗?
也就是说,我可以这样做:
也与 MFC api 相同:
我可以更换吗
我想我可以,但我只是想确保没有陷阱。
更新
所以我经历并用 nullptr 替换了我所有的 NULL,它似乎在任何地方都可以工作,但是我在下一行收到以下错误:
8>c:\something\something.cpp(118): 错误 C2664: 'CMFCPropertyGridProperty::CMFCPropertyGridProperty(const CString &,const COleVariant &,LPCTSTR,DWORD_PTR,LPCTSTR,LPCTSTR,LPCTSTR)' : 无法从 'nullptr 转换参数 4 ' to 'DWORD_PTR' 8> 原生 nullptr 只能转换为 bool 或使用 reinterpret_cast 转换为整数类型
(注意 CMFCPropertyGridProperty 是一个 Microsoft MFC 类)那是什么意思呢?
c++ - “向后移植” nullptr 到 C++-pre-C++0x 程序
或多或少是标题所暗示的。虽然我还没有使用 C++0x,但我想为它发生时做好准备,并且我还想减少我必须重写以使用它的一些工具的代码量。这样我就可以一次性获得向后和向前的兼容性。
我发现的最有趣的一个是nullptr
,我最近经常使用它。
在检查了“官方解决方法”和Meyer 的建议之后,我决定在我的 C++ 和未来的 C++0x 程序中都使用它。第二部分很简单——作为关键字,nullptr
将被简单地支持。但第一部分让我有些不适。
Meyers 提案的功能如下:
该提议的问题在于它声明了要按照std::nullptr_t
C++0x 要求声明的类型。这意味着要使解决方法“感觉原生”,必须通过重新打开std::
命名空间来添加类型来完成。我有这样的理解,在 C++ 程序中这样做是非法的(不像添加专业化,这显然是皱眉和放手警告)。
我想在 C++ 程序nullptr
中以舒适和合法的方式使用。我想到的一个选择是在另一个命名空间中声明类型,然后将其引入 using using
:
这是使它工作的正确方法吗?它将强制using
指令,这也强制指令的特定顺序#include
。我是否期望没有 C++0x 之前的代码会请求nullptr_t
具有命名空间的类型(例如,作为函数参数类型)?如果这样做,它真的会“感觉像本地人”吗?
作为附录,尝试将一些漂亮的 C++0x 东西反向移植到 C++ 以获得更好的兼容性和编码是受欢迎的还是不受欢迎的?与此同时,我已经将这个解决方案和我正在开发的其他解决方案集成到一个要发布的软件中。
c++ - 混合 C 和 C++ 时使用 nullptr 而不是 NULL
我有一个非常简单的问题...
我正在使用用 C 编写的 SDL API。我正在使用 C++。我的编译器支持关键字 nullptr,我一直在阅读它。似乎最好使用而不是使用 NULL 宏。
当我调用 SDL_SetVideoMode 时,我假设它在失败时返回 NULL,所以如果我这样做:
这会准确地检查我对表面测试的优化是否成功?
c++ - #define NULL nullptr 是否安全?
我在许多最顶层的头文件中看到了下面的宏:
在所有的代码中,NULL
都0
可以互换使用。如果我将其更改为。
会不会有什么不好的副作用?我能想到的唯一(好的)副作用是以下用法会变得不正确;
c++ - nullptr_t 是默认的可构造类型吗?
我无法从 C++11 标准中判断 nullptr_t 是否具有默认构造函数。换句话说,以下是否有效?:
GCC 和 VC++ 允许使用上述代码,但 clang 不允许。我在标准中找不到任何指定它没有默认构造函数的东西,而我能找到的表明它应该有。这对我很重要,因为我正在编写 nullptr 的基本回退实现以支持旧编译器,并且需要知道是否需要为其提供默认构造函数。
c++ - 如何定义 nullptr 以同时支持 C++03 和 C++11?
如何定义nullptr
同时支持 C++03 和 C++11?
下面的代码是否使用 C++03 和 C++11 编译而不改变 C++11 编译器中 nullptr 的含义?
c++ - unique_ptr、nullptr 并支持 gcc 4.5.x 和 4.6.x
我正在开发一个有两个不同最终用户的库,其中一个正在使用 gcc 4.5.3,另一个刚刚移到 gcc 4.6.3。该库使用新的 C++11 智能指针(特别是 unique_ptr)并在 gcc 4.5.3 上编译良好。但是,在这两个版本之间,gcc 开始支持 nullptr,因此 unique_ptr 的 API 发生了变化,以更接近标准。现在这样做,以下代码从精细变为模棱两可
是否有一种干净的(即下一句)方法来更改上面的 if 语句,以便它在有和没有 nullptr 的情况下都有效?如果可能的话,我想避免配置检查,然后像下面这样的宏(我认为它会起作用)
还是这是获得我正在寻找的行为的唯一方法?
c++ - 在空指针的情况下,shared_ptr 和 unique_ptr 的删除器的标准行为是否不同?
好的,首先是一些可能相关的事情:
我在 C++11 模式下使用 Clang 3.1 编译器,标准库设置为 libc++。
我正在尝试让自己熟悉 C++11,在这样做的过程中,我遇到了看起来很奇怪的行为。这可能是 Clang 或 libc++ 的一个怪癖,但我不会说 C++ 标准语言,而且我无法访问其他支持 C++11 的编译器,所以我无法真正检查它,我已经搜索了互联网和 Stack Overflow尽我所能,没有找到任何相关的东西……所以我们开始吧:
当使用 shared_ptr / unique_ptr 为简单资源实现 RAII 时,它们的行为似乎在删除时针对空指针而有所不同。我意识到通常没有必要删除空指针,但我曾期望该行为至少在两个 STL 智能指针之间匹配。
对于特定情况,请考虑以下代码:
我本来期望从中得到以下输出之一:
a) 如果两个删除器都被调用,即使指针为空:
b) 如果因为指针为空而没有调用删除器:
但我没有观察到这两种情况。相反,我观察到:
这意味着正在调用一个而不是另一个删除器。经过进一步调查,我发现shared_ptr的删除器被调用,无论它是否持有空值,但unique_ptr的删除器只有在它不持有空值时才会被调用。
我的问题:这实际上是标准规定的正确行为吗?如果是这样,为什么两种 STL 类型之间的指定行为会以这种方式有所不同?如果不是,这是我应该向 libc++ 报告的错误吗?