问题标签 [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.

0 投票
4 回答
8360 浏览

c++ - `std::nullptr_t` 类型的用途是什么?

我了解到nullptr,除了可以转换为任何指针类型(但不能转换为任何整数类型)之外,它还有自己的类型std::nullptr_t。所以有可能有一个接受的方法重载std::nullptr_t

究竟为什么需要这样的过载?

0 投票
2 回答
510 浏览

c++ - c ++ GDI位图不想加载

我的名字是 Miguel,我试图在一个 .bmp 中获取每个像素,但到目前为止,当我初始化位图时,它没有得到任何值,所以我猜我初始化它是错误的。这是我当前的代码:(片段)

现在,你能看看我的代码,也许可以预测我做错了什么。

谢谢你

米格尔·彼得森

0 投票
2 回答
283 浏览

c++ - &* 用于原始指针、迭代器和 ... std::nullptr_t

我有一个启用的模板函数(通过 std::enable_if),它的参数是原始指针,或者具有 std::iterator 类别,或者是 std::nullptr_t。在该函数中,原始指针(数据成员)设置为等于参数,如下所示:

&* 适用于指针和迭代器...但对于 std::nullptr_t 则失败。是否有任何解决方案可以避免编写 2 个不同的函数?

谢谢你。

0 投票
3 回答
688 浏览

c++ - 为什么这里的三元运算符与 if-else 不一样?

我正在使用 TR1std::function来实现一个简单的回调机制。如果我不想被回调,我注册nullptr为回调处理程序。这可以编译并正常工作:

如果我使用三元运算符重写它......

... VC++ 的编译器说:

错误 C2446: ':' : 没有从 'nullptr' 转换为 'std::tr1::_Bind<_Result_type,_Ret,_BindN>' 1> with 1>
[ 1> _Result_type=void, 1> _Ret=void, 1>
_BindN=std::tr1::_Bind2,Foo *,std::tr1::_Ph<1>> 1> ] 1> 没有构造函数可以采用源类型,或者构造函数重载决议不明确

这是编译器的限制,还是我在做一些愚蠢的事情?我知道在这种特殊情况下,我可能不会从使用三元运算符中获得任何好处,但我只是好奇。

0 投票
4 回答
8656 浏览

c++ - 为什么 nullptr 不能转换为 int?

摘要:nullptr转换为bool,又bool转换为int,那为什么不nullptr转换为int

这段代码没问题:

这没关系:

那为什么这不行呢?

0 投票
3 回答
1960 浏览

c++ - 实现安全的 nullptr

我想让我的代码在旧版 C++(使用“NULL”的 C++ 代码)和新的 C++11 标准(使用“nullptr”的 C++ 代码)上都可编译

我正在使用 GCC,但计划在完成最重要的事情时也为 VS 重新编译整个代码库。

我是否应该期望 GCC 和 VS 都会做类似的事情

还是我自己做更好(当然使用不同的名称,其中 MY_LIB 将被我的库后缀替换)?

我想要实现的是无论是否实现了 C++11 功能都可以编译的代码(而且由于我没有使用模板,所以它们很少)。

例如,关键字“override”和“final”已经完成。

我问这个问题是因为我知道“nullptr”问题有点奇怪,所以也许只是做我已经为覆盖和最终所做的同样的事情,是错误的。需要对此发表意见。欢迎任何帮助。

0 投票
7 回答
57041 浏览

c++ - 使用 nullptr 有什么好处?

这段代码在概念上对三个指针做同样的事情(安全指针初始化):

nullptr那么,分配指针与分配值NULL或分配指针相比有什么优势0

0 投票
2 回答
710 浏览

c++ - 新对象中的空函数指针实际上不是 nullptr

我正在使用带有 Visual Studio 2012 的 C++(11)。

我使用定制的包装类创建窗口。

每个窗口都有一系列用于插件事件的“套接字”。

我使用以下宏来调用可以在消息循环中分配给我的窗口类的不同套接字:

我的情况如下;

带断点的代码

您可以假设 pWindow 是指向 CUIWindow 对象的有效指针。

在显示的断点处,一些未初始化的 OnXXXX 事件被定义为 0xCDCDCDCD 并在它们的消息到达时被调用(不管我在创建类后从未真正明确地设置它们)。这给了我一个 0x0BADFOOD 异常,因为函数指针是错误的。我会假设空函数指针会被捕获,if ( fn != nullptr )但是现在我不太确定,我正在请求帮助;

  1. 解释为什么会发生这种情况
  2. 找到阻止这种情况发生的最佳方法,最好不要在构造函数中将所有函数指针显式设置为零,因为有时会有很多很多套接字。
0 投票
4 回答
5356 浏览

c++ - 为什么不能取nullptr的地址?

在 C++11 标准中,我不明白为什么nullptr不允许获取地址而允许获取自己实例的地址的原因。std::nullptr_t除了nullptr保留关键字这一事实之外,此决定是否有任何指定的理由?

仅仅因为它使我感到有趣,我试图用以下函数绕过这个限制:

我不得不reinterpret_cast在参数上使用,因为没有它我会得到歇斯底里的错误:

当我通过直接传递nullptr来调用这个函数时,我每次都会得到一个不同的地址。是否nullptr为比较等即时动态分配地址?或者(可能更有可能)编译器是否强制底层对象的临时副本?

当然,这些都不是重要信息,我只是觉得有趣的是为什么要实施这个特定的限制(以及随后为什么我会看到我的行为)。

0 投票
1 回答
1007 浏览

reference - C++/CLI 引用未在后续进入本地块时初始化为 nullptr

我认为在 C++/CLI 中声明一个没有显式初始值的局部引用变量总是将其初始化为 nullptr。我发现这不会发生在第二个和以后进入本地块的条目中。这是示例代码。

输出是:

如果我添加显式初始化

然后每个循环重新初始化引用和localI

这似乎与我在 MSDN 上找到的内容相矛盾,其中说

“以下代码示例显示,当声明句柄但未显式初始化时,它们默认初始化为 nullptr。”