相关疑难解决方法(0)

什么是nullptr?

我们现在拥有许多新功能的C++ 11.一个有趣且令人困惑的(至少对我来说)是新的nullptr.

嗯,不再需要令人讨厌的宏了NULL.

int* x = nullptr;
myclass* obj = nullptr;
Run Code Online (Sandbox Code Playgroud)

尽管如此,我还没有得到如何nullptr运作.例如,维基百科的文章说:

C++ 11通过引入一个new 关键字作为一个区分空指针常量来解决这个问题:nullptr.它的类型为nullptr_t,它是可隐式转换的,可与任何指针类型或指向成员类型的类型相媲美.除了bool之外,它不可隐式转换或与整数类型相比.

它是一个关键字和一个类型的实例?

另外,你有另一个例子(在维基百科旁边)哪里nullptr优于好老0

c++ pointers nullptr c++11

546
推荐指数
8
解决办法
31万
查看次数

NULL,'\ 0'和0之间有什么区别

在C中,似乎有零各个值之间的差- NULL,NUL0.

我知道ASCII字符的'0'计算结果为480x30.

NULL指针通常定义为:

#define NULL 0
Run Code Online (Sandbox Code Playgroud)

要么

#define NULL (void *)0
Run Code Online (Sandbox Code Playgroud)

另外,也有似乎评价的NUL人物.'\0'0

是否有时候这三个值不相等?

这在64位系统上也是如此吗?

c null pointers

287
推荐指数
6
解决办法
28万
查看次数

"int*ptr = int()"值初始化如何不违法?

以下代码(取自此处):

int* ptr = int();
Run Code Online (Sandbox Code Playgroud)

在Visual C++中编译并对指针进行值初始化.

怎么可能?我的意思是int()产生一个类型的对象,int我不能指定int一个指针.

上面的代码如何不违法?

c++ pointers initialization built-in-types visual-c++

86
推荐指数
4
解决办法
3602
查看次数

0xDEADBEEF等效于64位开发?

对于32位系统(无论是Linux,Mac OS或Windows,PowerPC还是x86)的C++开发,我已经初始化了指针,否则这些指针将被定义(例如,它们无法立即获得正确的值),如下所示:

int *pInt = reinterpret_cast<int *>(0xDEADBEEF);
Run Code Online (Sandbox Code Playgroud)

(为了节省打字和DRY,右侧通常是常数,例如BAD_PTR.)

如果在获得正确值之前取消引用pInt,那么它将在大多数系统上立即崩溃(而不是在某些内存被覆盖或进入非常长的循环时崩溃).

当然,行为取决于底层硬件(从用户进程获取奇数地址0xDEADBEEF的4字节整数可能完全有效),但崩溃对于我迄今为止开发的所有系统都是100%可靠的( Mac OS 68xxx,Mac OS PowerPC,Linux Redhat Pentium,W​​indows GUI Pentium,W​​indows控制台Pentium).例如,在PowerPC上,从奇数地址获取4字节整数是非法的(总线故障).

在64位系统上,这有什么好处呢?

c++ debugging 64-bit defensive-programming

41
推荐指数
8
解决办法
7498
查看次数