C ++ 11中的统一初始化语法

时间:2014-07-29 09:25:43

标签: c++ c++11 uniform-initialization

关于C ++ 11中“统一初始化语法”的问题。

使用C ++ 11中的下一个语法初始化结构是否合法(见第128-137行)?或POD仍然是实际的?

http://pastebin.com/GMZ5QDmR

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(); }
    };
}

1 个答案:

答案 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。

请注意,这些页面上可能未提及标准库功能。

您正在寻找的功能通常属于“(常规)初始化列表”。