关于C ++ 11中“统一初始化语法”的问题。
使用C ++ 11中的下一个语法初始化结构是否合法(见第128-137行)?或POD仍然是实际的?
MSVC 2013编译器的问题。此示例成功编译,但崩溃与错误的函数调用异常。这告诉我std :: function对象没有正确初始化。
顺便说一句,ICC 13.0无法编译示例中的代码。
example.cpp(130):错误#2084:指定者可能未指定非POD(普通旧数据)子对象
编译器有缺陷吗?或者编译器都可以,这种方法不符合C ++ 11?
这是一个简短的例子:
#include <functional>
#include <memory>
struct dispatcher_t {};
struct binder_t {};
struct factories_t
{
std::function< std::unique_ptr< dispatcher_t > () > m_disp_factory;
std::function< std::unique_ptr< binder_t > () > m_bind_factory;
};
std::unique_ptr< dispatcher_t >
create_dispatcher()
{
return std::unique_ptr< dispatcher_t >( new dispatcher_t() );
}
std::unique_ptr< binder_t >
create_binder()
{
return std::unique_ptr< binder_t >( new binder_t() );
}
void main()
{
factories_t f{
[]() { return create_dispatcher(); },
[]() { return create_binder(); }
};
}
答案 0 :(得分:2)
首先:void main
在C ++中是非法的。使用int main
。
Microsoft Visual Studio 2013不是C ++ 11类的明星。英特尔的编译器版本13也没有,因为它们有14版本。尽管如此,你可以试试MSVC++ 2013 November CTP,这在语言支持方面要好一点。
如果您想查看您的代码是否有效,请使用最新版本的GCC或Clang,两者均可在the Greatest Online Compiler Platform in Existence上找到。
C ++语言功能在供应商的网站上报告:
任何其他C ++编译器都不值得一提wrt C ++ 11。
请注意,这些页面上可能未提及标准库功能。
您正在寻找的功能通常属于“(常规)初始化列表”。