我是否应该担心C 17中的Wmissing-Field-Initializer和汇总初始化
Should I be worried about Wmissing-field-initializers and aggregate initialization in C++17?
我用 -Wall
和 -Wextra
启用了gcc的一些代码。此代码发出警告:
struct A { A(int) {} };
struct B {};
struct C : A, B {};
int main() {
(void) C{1};
}
main.cpp: In function 'int main()': main.cpp:11:15: warning: missing initializer for member 'C::<anonymous>' [-Wmissing-field-initializers] (void) C{1}; ^
我应该为此担心吗?这是GCC中输出此警告的错误吗?看来我没有初始化的字段,也没有缺少参数。
c 17允许您在基础类的类上执行汇总初始化。每个基类有效地将成员视为成员(它们是在班级的直接成员面前)。因此,要汇总初始化,C
有两个"成员":C::A
和C::B
。
您只初始化一个。
哦,肯定的是,B
实际上没有任何初始化。但是对于-Wall
,它与此不同:
struct C
{
A a;
B b;
};
(void) C{1};
这也会发出警告。无论哪种情况,您都会通过为B
:(void)C{1, {}};
。
,但就标准而言,这是完全有效的代码。B
的值初始化。无论哪种情况。
相关文章:
- std::unordered_map 类型对象声明期间出现"field has incomplete type"错误
- this->field vs. this.field in C++
- "Field has incomplete type"引用自己的类的问题
- java.lang.Field 等效于 c++ 中
- 修复警告"field a is not used"如果字段在配置中未使用的好方法
- Met c++ 代码" #define ELEMENT(TYPE, FIELD)"
- 我是否应该担心C 17中的Wmissing-Field-Initializer和汇总初始化
- 如何填写WAV文件的"data field"
- 是否有GCC选项来警告编写"this-field"而不是"this->field"?
- 忽略 gcc/clang 的"-Wmissing-braces"警告是否明智?
- bmiColors field of BITMAPINFO structure
- cvLogPolar 导致 opencv 错误"Bad flag (parameter or structure field)"
- 类标头和在我的类.cpp文件中使用构造函数:"error: class 'Test' does not have any field named 'counter'"
- Mosync Javascript NativeUI Editbox as Password field
- 在 Qt 创建器中禁用 -wmissing 字段初始值设定项警告
- 智能感知说错误:成员"Class::field"无法访问,但它仍然有效?为什么?
- 具有非类型参数的类模板的静态成员的 gdb "static field value has been optimized out"
- 如何修复使用前向声明时的"field has incomplete type"错误
- C++:基类构造函数中的"Field 'object_var' must be initialized"
- 护士通过FIELD