我从主干版GCC-4.7.0构建了MinGW:http://code.google.com/p/mingw-builds/downloads/list
在对此版本的更改的描述中,可以说实现了非静态数据成员初始化程序:http://gcc.gnu.org/gcc-4.7/changes.html
http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2008/n2756.htm
当我尝试编译这样一个例子时:
#include <iostream>
#include <string>
struct type {
type()
:i(33)
{}
int i;
std::string s("string");
};
int main() {
type t;
std::cout << t.i << " : " << t.s << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
我收到了很多错误,最后这个错误:
main.cpp:16:35:注意:'std :: string(type :: )(int){aka std :: basic_string(type ::)(int)}'不是从'const std :: basic_string <派生的_CharT,_Traits,_Alloc>'main.cpp:16:35:注意:无法解析重载函数't.type :: s'中的地址
但根据文档,代码是正确的.
JRL*_*JRL 14
在确定是否声明函数或对象时,问题似乎是模糊不清,编译器正在选择函数.
您应该尝试使用以下语法初始化字符串:
std::string s = "string";
Run Code Online (Sandbox Code Playgroud)
如果我们按照GCC发行说明中关于非静态数据成员初始化程序的链接(建议N2756),他们在问题1中提到了这一点,并且该解决方案注意:
CWG在Kona进行了6比3的民意调查,支持分类范围查询; 这就是本文提出的内容,非静态数据成员的初始化程序仅限于"= initializer-clause"和"{initializer-list}"形式.