考虑下面的C++代码:
void* a = &a;
编译器为什么不会因为使用未声明的标识符而抱怨呢?
此外,编译器认为变量a
是什么?它是指向void对象的指针还是指向void*
指针的指针?
考虑下面的C++代码:
void* a = &a;
编译器为什么不会因为使用未声明的标识符而抱怨呢?
此外,编译器认为变量a
是什么?它是指向void对象的指针还是指向void*
指针的指针?
void* a = &a;
^~~~~~~~~~~~~~~~~
a declared as `void*` from here on
&a
是 void**
类型,但由于任何指针类型都可以隐式转换为 void*
类型...void *a = a;
将是未定义行为,否则在命名空间范围内使用则没问题。 - Nawazint a; void *a = &a
? - Cole Tobin它相当于
void* a;
a = &a;
因此,a
已经声明。所以 a
获取了写在 a
中的地址。因此它是一个指向空指针的指针。(您尚未定义任何对象。)a
本身就是一个对象。(在C++中,并不是所有的对象都有用户定义的类型。) - MSalters