4

Ich schaue eine Video-Serie auf youtube von Jason Tuner und auf diesem bestimmten Video hier gefunden: Aggregate Initializations er beginnt mit clang ++ C++ 03 und ändert dann Compiler zu clang ++ C++ 11 dann wann Er integriert die Basisklassenhierarchie, zu der er sie ändert, indem er C++ 17 oder C++ 1z verwendet, wobei er einen neuen Build von clang ++ verwendet.C++ 17 Aggregat-Initialisierungen

Ich habe gerade MSVS2017RC heruntergeladen und installiert und ich laufe Windows 7 64bit SP1 auf einem Intel Quad Core Extreme.

aber wenn ich versuche, sein Video zu folgen, während dies in meinem IDE mit

struct B { 
    double q; 
}; 

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

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

ich diesen Compiler-Fehler bekommen:

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 Hat 2017 haben die Unterstützung dieser Funktionen, die sind in C++ 17 gefunden? Wenn ja, gibt es spezielle Compiler-Optionen, die in den Projekteigenschaften festgelegt werden müssen? Oder ist das derzeit exklusiv für clang oder gcc? Was ist der Hauptgrund für MS Compiler Fehler C2440, wenn dies ein C++ 17 Compiler sein soll?

Antwort

6

Visual Studio 2017 does not support all, or most, of C++17 in der heutigen Zeit. Zu den Dingen, die es nicht unterstützt, gehört die Aggregat-Initialisierung von Basisklassen.

+0

Okay, danke für die Klarstellung. Ich habe auf der MSDN-Seite gesehen, dass Aggregat in Ordnung ist, aber nicht mit einer Basisklasse oder Vererbung, aber die cppreference-Website zeigt ähnliche Syntax-Unterstützung wie in der oben erwähnten Video-Serie. –

+0

@FrancisCugler: Die Cppreference Seite sagt nicht, dass VS2017 das tun wird. In der Tat sagt es genau das Gegenteil. Unter "Aggregat-Initialisierung von Klassen mit Basisklassen" hat Visual Studio ein großes, rotes Leerzeichen. –

+0

Ich glaube, du hast mich falsch verstanden; Ich wollte nicht explizit sagen, dass cppreference angibt, dass es von VS2017 unterstützt wird; Ich habe nur gesagt, dass es gültige Syntax für C++ 17 ist. Auch nach dem Betrachten der Liste in dem von Ihnen bereitgestellten Link; Es scheint, dass die MS hinter der Kurve zurückbleibt. –