Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;can';t将一对指针初始化为NULL_C++_Pointers_Null_Std Pair - Fatal编程技术网

C++ C++;can';t将一对指针初始化为NULL

C++ C++;can';t将一对指针初始化为NULL,c++,pointers,null,std-pair,C++,Pointers,Null,Std Pair,我正在使用g++4.4.7进行编译(目前不能再高了),并使用-std=gnu++0x编译器开关,该开关应允许第三行的语法 typedef std::vector<CI_RecordInfo_Pair> CI_RecordInfo_Vector; typedef std::vector<std::pair<std::string, CI_RecordInfo_Vector*> > MgrBlks; MgrBlks mgr_n_blks { {"T2M_NAM

我正在使用g++4.4.7进行编译(目前不能再高了),并使用
-std=gnu++0x
编译器开关,该开关应允许第三行的语法

typedef std::vector<CI_RecordInfo_Pair>   CI_RecordInfo_Vector;
typedef std::vector<std::pair<std::string, CI_RecordInfo_Vector*> > MgrBlks;
MgrBlks mgr_n_blks { {"T2M_NAME", NULL} };  // <--- line 59

有什么区别?

编译器拒绝这一行是正确的:

MgrBlks mgr_n_blks { {"T2M_NAME", NULL} };
在C++11
std::pair
中,有一个模板构造函数,它接受任何参数类型,然后将它们转换为成员:

template<typename X, typename Y>
  pair(X&& x, Y&& y)
  : first(std::forward<X>(x)), second(std::forward<Y>(y))
  { }

但是使用
nullptr

比使用
nullptr
更简单、更清晰。使用
nullptr
代替
NULL
有效吗?g++4.4不支持它。直到4.6。如果
NULL
被定义为
0
,则其类型为
int
,而不是
long
。显然,实现将
NULL
定义为
0L
或类似的内容。在g++4.7.2中,
NULL
扩展为
\uu NULL
,这显然是
long
类型。直到g++4.6才添加nullptr,但强制转换NULL编译正确。@Chap roll您自己的
nullptr
也可以完成--不要称它为
nullptr
,但是你可以不用花很多钱就能获得大部分好处。@KeithThompson,我说过“
NULL
定义为
0
0L
或类似的值”。我认为很明显,它不会在所有情况下都被推断为
long
,但我会澄清这一点。显然,对于GCC,它被推断为
long
,但这不是标准所要求的。您的回答似乎暗示
0
将解析为
long
;你最近编辑修复了这个问题。
MgrBlks mgr_n_blks { {"T2M_NAME", NULL} };
template<typename X, typename Y>
  pair(X&& x, Y&& y)
  : first(std::forward<X>(x)), second(std::forward<Y>(y))
  { }
MgrBlks mgr_n_blks { {"T2M_NAME", (CI_RecordInfo_Vector*)NULL} };