2
我是一名C程序员,想要学习C++ 11,并且遇到了一些我不明白的东西。从我所知道的,下面的问题是值初始化和直接初始化之间的区别。直接初始化与值初始化
下面的代码片段使用Visual Studio不能编译:
class TestClass {
int _val;
std::string _msg;
public:
TestClass(int, std::string);
void action();
};
TestClass::TestClass(int val, std::string msg)
: _val{val}, _msg{msg}
{
}
void TestClass::action()
{
std::cout << _msg << _val << std::endl;
}
它给我:
错误C2797: 'TestClass中:: _味精':内部成员初始化列表或非列表初始化 - 不执行静态数据成员初始值设定程序
但是,更改
TestClass::TestClass(int val, std::string msg)
: _val{val}, _msg{msg}
到
TestClass::TestClass(int val, std::string msg)
: _val{val}, _msg(msg)
修复我的问题。这两种形式的初始化有什么区别,什么时候应该使用另一种形式?我被引导认为在处理显式类型时应该使用值初始化。
你的第一个例子没有错。你的编译器是错误的。你使用什么版本? **编辑**从头开始。错误消息显示“未执行”。所以编译器作者意识到这个问题,他们只是没有在你使用的版本中修复它。 –
http://en.cppreference.com/w/cpp/language/list_initialization – 0x499602D2
'_msg {msg}'和'_msg(msg)'都是[直接初始化](http://en.cppreference.com/w/CPP /语言/ direct_initialization)。不同之处在于前者是[direct-list-initialization](http://en.cppreference.com/w/cpp/language/list_initialization),而后者则是直接非列表初始化。 – cpplearner