4

我在看youtube上的视频系列由Jason Tuner和在这里找到的这个特定视频:Aggregate Initializations他开始使用clang ++ C++ 03,然后将编译器更改为clang ++ C++ 11,然后当他将基类层次结构改为使用C++ 17或C++ 1z,使用最近构建的clang ++。C++ 17总结初始化

我刚刚下载并安装了MSVS2017RC,并且在Intel四核酷睿上运行Windows 7 64bit 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中找到?如果是这样,那么需要在项目属性中设置特殊的编译器选项?或者,这是目前独家铿锵或海湾合作委员会? MS的编译器错误C2440如果这应该是一个C++ 17编译器的主要原因是什么?

回答

6

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

+0

好的,谢谢你的澄清。我确实在MSDN页面上看到它确实表示聚合是可以的,但没有基类或继承,但cppreference网站确实显示了类似于上述视频系列中的语法支持。 –

+0

@FrancisCugler:Cppreference页面没有说VS2017会这样做。事实上,它恰恰相反。在“使用基类对类进行聚合初始化”下,Visual Studio有一个很大的红色空间。 –

+0

我想你误解了我;我并不是想明确地说cppreference是说它支持VS2017;我只是说它对于C++ 17来说是有效的语法。在查看您提供的链接中的列表之后,似乎MS开始落后于曲线。 –