c ++ 17聚合初始化

时间:2017-02-13 15:02:21

标签: c++ visual-c++ c++17 visual-studio-2017 aggregate-initialization

我正在观看由Jason Tuner在youtube上播放的视频系列,并在此处发现的这个特定视频:Aggregate Initializations他开始使用clang ++ c ++ 03,然后将编译器更改为clang ++ c ++ 11然后当他合并时基类层次结构他使用c ++ 17或c ++ 1z使用最近的clang ++构建将其更改为。

我刚刚下载并安装了MSVS2017RC,我在Intel Quad Core Extreme上运行Windows 7 64位SP1。

然而,当我在我的IDE中尝试关注他的视频时

struct B {
    double q;
};

struct S : B {
    int i;
    float f;
};

int main() {
    S s{ {}, 1, 2.3f };
    return s.f;
}

我收到此编译器错误:

1>------ Build started: Project: Test1z, Configuration: Debug Win32 ------
1>stdafx.cpp
1>Test1z.cpp
1>c:\users\skilz80\documents\visual studio 2017\projects\test1z\test1z\test1z.cpp(15): error C2440: 'initializing': cannot convert from 'initializer list' to 'S'
1>c:\users\skilz80\documents\visual studio 2017\projects\test1z\test1z\test1z.cpp(15): note: No constructor could take the source type, or constructor overload resolution was ambiguous
1>c:\users\skilz80\documents\visual studio 2017\projects\test1z\test1z\test1z.cpp(16): warning C4244: 'return': conversion from 'float' to 'int', possible loss of data
1>Done building project "Test1z.vcxproj" -- FAILED.
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

Visual Studio 2017是否支持c ++ 17中的这些功能?如果有,是否需要在项目属性中设置特殊的编译器选项?或者这是目前独家铿锵还是gcc?如果这应该是c ++ 17编译器,那么MS的编译器错误C2440的主要原因是什么?

1 个答案:

答案 0 :(得分:6)

Visual Studio 2017 does not support all, or most, of C++17目前。它不支持的是基类的聚合初始化。