以下代码(从此处获取):
int* ptr = int();
在Visual C ++中进行编译,并对值进行初始化。
那怎么可能?我的意思是int()产生一个类型的对象,int我不能将分配int给指针。
上面的代码如何不违法?
以下代码(从此处获取):
int* ptr = int();
在Visual C ++中进行编译,并对值进行初始化。
那怎么可能?我的意思是int()产生一个类型的对象,int我不能将分配int给指针。
上面的代码如何不违法?
int()产生值的构造值int(我认为这是C ++ 03指定的值),默认值int是0。这等效于int *ptr = 0;
NULL可能是非零值。我说过,它可以是任何零值整数常量(包括int())。
Answers:
int()是值为0的常量表达式,因此它是产生空指针常量的有效方法。最终,这只是一种稍微不同的说法int *ptr = NULL;
nullptr,您可以在C ++ 11中使用它代替0或NULL在新代码中使用。
0可能表示空指针常量或数字0,而nullptr显然是空指针常量。此外,正如Jamin所说,它还具有“额外的编译时检查”功能。在键入之前,请尝试思考。
因为int()产量0,这是可以互换的NULL。NULL本身被定义为0,与C的NULL这是(void *) 0。
请注意,这将是一个错误:
int* ptr = int(5);
并且仍然可以使用:
int* ptr = int(0);
0是一个特殊的常量值,因此可以将其视为指针值。产生0诸如的常量表达式1 - 1也可以与空指针常量一起使用。
(void *)0。它只是一个定义为“值为0的整数常量表达式,或此类转换为void *的表达式”的实现。
NULL为(void*)0;的C编译器。总是0(或者也许0L)。(但是,当C90(void*)0在C中成为合法代码时,我已经在使用C ++。)
#if !defined(__cplusplus) \n #define NULL ((void*)0) \n #else \n #define NULL (0)ubuntu中gcc的当前版本是4.5,在我们的系统中是4.0。
0是特殊文字”-仅因为它是一个常量表达式,并且具有特殊值0。(1-1)同样特殊,它也是一个空指针常量,因此也是int()。0作为文字的事实足以成为常量表达式,但不是必需的条件。诸如之类的东西strlen(""),尽管也具有特殊的值,但它0不是常量表达式,因此也不是空指针常量。
0,而不是0字面量。
表达式的结果int()为一个常量的默认初始化整数,该整数值为0。该值很特殊:它用于初始化一个指向NULL状态的指针。
int f() { return 0; },表达式f()的值为0,但不能用于初始化指针。
好吧,int不是对象。
我相信这里发生的事情是你告诉int *指向由int()确定的某些内存地址
因此,如果int()创建0,则int *将指向内存地址0
int()最肯定是一个对象。
int()。定义int i;毫无疑问i是一个对象。
int是类型而不是对象而成立。无论是int()产生一个对象或只是一个右值不会影响任何人在其他地方也说。