标签: nullptr

混合C和C++时使用nullptr而不是NULL

我有一个非常简单的问题......

我使用的是用C语言编写的SDL API.我正在使用C++.我的编译器支持关键字nullptr,我一直在阅读它.似乎使用而不是使用NULL宏更好.

当我调用SDL_SetVideoMode时,我假设它在失败时返回NULL,所以如果我这样做:

SDL_Surface *test = nullptr;

if ((test = SDL_SetVideoMode(params)) == nullptr)
{
    // to-do code
}
Run Code Online (Sandbox Code Playgroud)

这会准确地检查我在表面测试中的优化是否成功?

c++ sdl nullptr c++11

9
推荐指数
1
解决办法
1253
查看次数

nullptr的类型是什么?

标准状态,即nullptr类型std::nullptr_t(2.14.7)的指针文字.并且18.2p9定义nullptr_t

namespace std {
  typedef decltype(nullptr) nullptr_t;
}
Run Code Online (Sandbox Code Playgroud)

7.1.6.2p4 decltype(nullptr)是表达式的类型,nullptr根据定义std::nullptr_t(因为表达式nullptr是prvalue).将其代入nullptr_t结果的定义中

typedef nullptr_t nullptr_t
Run Code Online (Sandbox Code Playgroud)

另一方面,typedef说明符不引入新类型,它只是另一个现有类型的名称.那么,到底是什么nullptr_t?我无法理解这些定义.

c++ types nullptr c++11

9
推荐指数
2
解决办法
4012
查看次数

在函数调用中,为什么nullptr不匹配指向模板对象的指针?

以下是一个完美运行的代码示例:


#include<iostream>
#include<vector>

template< class D, template< class D, class A > class C, class A = std::allocator< D > >
void foo( C< D, A > *bar, C< D, A > *bas ) {
  std::cout << "Ok!" << std::endl;
}

int main( ) {
  std::vector< int > *sample1 = nullptr;
  std::vector< int > *sample2 = nullptr;
  foo( sample1, sample2 );
  return( 0 );
}
Run Code Online (Sandbox Code Playgroud)

但是,在下面的代码中,编译器无法将std :: vector <int>*与nullptr匹配为第二个参数,甚至能够从第一个参数中扣除模板类型.


#include<iostream>
#include<vector>

template< class D, template< class D, class A > …
Run Code Online (Sandbox Code Playgroud)

c++ function-call nullptr template-matching c++11

9
推荐指数
2
解决办法
5123
查看次数

为什么 C++ 的 NULL 是整数文字而不是像 C 中的指针?

我已经编写 C++ 多年,nullptr用于空指针。我也知道 C,从那里 NULL 起源,并记住它是一个空指针的常量,类型void *

出于NULL某些原因,我不得不在我的 C++ 代码中使用某些东西。好吧,想象一下当在一些模板参数推导过程中编译器告诉我我的 NULL 真的是一个......长时我的惊讶。所以,我仔细检查了:

#include <type_traits>
#include <cstddef>

static_assert(not std::is_same<decltype(NULL), long>::value, "NULL is long ???");
Run Code Online (Sandbox Code Playgroud)

事实上,静态断言失败(使用 GCC 和 clang)。

cppreference.com 上检查,果然(C++11 措辞):

宏 NULL 是一个实现定义的空指针常量,它可以是一个值为 0 的整数文字,或者一个类型为 的纯右值std::nullptr_t

为什么这是有道理的?就其本身而言,鉴于 C 的不兼容性?

c c++ cross-language null-pointer nullptr

9
推荐指数
4
解决办法
296
查看次数

将 nullptr 分配给成员指针

谁能告诉我为什么对于 MSVC、clang 和 g++,nullptr分配给类型数据成员指针的内部表示是 -1?Class::*对于 64 位系统来说(size_t)1 << 63是最好的,因为如果您nullptr以这种方式使用成员指针,您肯定会接触内核内存并发生崩溃,因此这将是一个很好的调试辅助工具。

-1背后有更深层次的原因吗?

样本:

struct X
{
    int x, y;
};

using member_ptr = int X::*;

member_ptr f()
{
    return nullptr;
}
Run Code Online (Sandbox Code Playgroud)

...使用 g++ 生成以下二进制文件:

movq    $-1, %rax
ret
Run Code Online (Sandbox Code Playgroud)

c++ pointer-to-member nullptr

9
推荐指数
1
解决办法
501
查看次数

什么C++ 0x标头应该定义nullptr?

既然C++ 0x几乎就在这里,我一直在试验它,特别是使用nullptr.如果需要使用它,我无法弄清楚应该包含哪些标准头文件.

任何帮助表示赞赏.

c++ header nullptr c++11

8
推荐指数
1
解决办法
2万
查看次数

C++ 11-一直使用nullptr?

我只是有点困惑.

我什么时候应该使用nullptr?

我已经在一些网站上看到应该总是使用它,但是我不能为非指针设置nullptr,例如:

int myVar = nullptr; // Not a pointer ofcourse
Run Code Online (Sandbox Code Playgroud)

我应该总是使用NULL非指针和nullptr指针吗?

感谢任何帮助!我对c ++ 11(和c ++整体)很新.

pointers nullptr c++11

8
推荐指数
1
解决办法
2512
查看次数

C++中的nullptr与C#中的null相同吗?

C++中的nullptr与C#中的null相同吗?

似乎没有人在Google或Stackflow上问过这个问题.

c# c++ null nullptr

8
推荐指数
2
解决办法
3760
查看次数

在C++中nullptr和nullptr_t有什么区别?

我应该使用哪一个?如果我使用一个而不是另一个优势?

c++ nullptr c++11

8
推荐指数
4
解决办法
5537
查看次数

nullptr和指针算术

考虑以下代码,是否可以安全地进行指针运算nullptr

我假设nullptr在另一个结果中添加任何偏移nullptr,到目前为止MSVC产生的结果与我预期的一样,但是我有点不确定这样使用是否nullptr安全:

float * x = nullptr;

float * y = x + 31; // I assume y is a nullptr after this assigment

if (y != nullptr)
{
  /* do something */
}
Run Code Online (Sandbox Code Playgroud)

c++ pointers nullptr c++11

8
推荐指数
2
解决办法
1125
查看次数