= NULL,以及在c ++ 98中初始化的非静态数据成员

时间:2018-04-02 20:58:51

标签: c++ gcc c++03 c++98

之前:
在C ++ 98中,C ++ 03 - 不存在非静态数据成员初始化程序(NSDMI) https://wandbox.org/ - 在线编译器,您可以更改gcc版本等。

好的,现在让我们考虑一些代码(在c ++ 98或c ++ 03中):

#include <iostream>
struct test {
    void *x = NULL;
    void *y = 0;  //with (void*)0 here, we get the same results
};
int main() {
    std::cout<<(int)NULL;
}

自gcc 4.8.1:

void *x = NULL;

允许(意外),但

void *y = 0;

不是(如预期的那样)。 //得到“non-static data member initializers only available with -std=c++11 or -std=gnu++11”警告

零问题是为什么0!= NULL(我认为#define NULL 0
 要么 #define NULL (void *)0

主要问题是为什么在较新的gcc版本中,我们可以初始化: void *x = NULL;没有任何警告 - 而此指针是非静态的,默认情况下它不设置为NULL(默认情况下void *x;未初始化)。
而我的另一个问题是如何强制旧的gcc版本接受它,或者是否有任何技巧使非静态指针成员默认初始化为NULL。

我正在使用: $ g++ prog.cc -Wall -Wextra -O2 -march=native -std=c++98 -pedantic-errors

0 个答案:

没有答案