c++17 聚合初始化
c++17 Aggregate Initializations
我正在YouTube上观看Jason Tuner的视频系列,以及在这里找到的这个特定视频: 聚合初始化 他从 clang++ c++03 开始,然后将编译器更改为 clang++ c++11,然后当他合并基类层次结构时,他将其更改为使用 C++17 或使用最近构建的 Clang++ 的 C++1Z。
我最近刚刚下载并安装了MSVS2017RC,我在英特尔四核至尊版上运行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:usersskilz80documentsvisual studio 2017projectstest1ztest1ztest1z.cpp(15): error C2440: 'initializing': cannot convert from 'initializer list' to 'S'
1>c:usersskilz80documentsvisual studio 2017projectstest1ztest1ztest1z.cpp(15): note: No constructor could take the source type, or constructor overload resolution was ambiguous
1>c:usersskilz80documentsvisual studio 2017projectstest1ztest1ztest1z.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 中的这些功能?如果是这样,是否需要在项目属性中设置特殊的编译器选项?或者这是目前 clang 或 gcc 独有的?MS的编译器错误的主要原因是什么 C2440
这应该是 c++17 编译器?
>Visual Studio 2017目前不支持所有或大多数C++17。它不支持的功能之一是基类的聚合初始化。
相关文章:
- 是否可以初始化不可复制类型的成员变量(或基类)
- C++使用整数的压缩数组初始化对象
- C++初始化基类
- 多成员Constexpr结构初始化
- 复制列表初始化的隐式转换的等级是多少
- C++17中函数模板中的静态数组初始化(MSVC 2019)
- 为什么这种直接初始化有效?(C++17)
- C++17 使用驱动类常量作为基类构造函数的参数来初始化基类构造函数
- C++17,初始化一个数组
- 在 C++17 中初始化后可以更改行列变量吗?
- 你能初始化unique_ptrs "static const vectors"吗?(C++17 与 GCC 7.3)
- C++17 之前的聚合初始化
- 聚合初始化的 C++17 扩展是否使大括号初始化变得危险?
- C++17 几乎一致的初始化
- C 中副本初始化要求的放松17
- C++17 用于初始化模板类的折叠表达式的极限类型
- 可以在C 17中汇总初始化
- 我是否应该担心C 17中的Wmissing-Field-Initializer和汇总初始化
- c++17 聚合初始化
- 在C++17中使用空列表初始化构造函数时发生编译错误