【发布时间】:2021-10-19 07:52:08
【问题描述】:
foo.h
#ifndef FOO_H
#define FOO_H
class Foo
{
int fooObj1;
bool fooObj2;
public:
Foo(int input1);
};
#endif
foo.cpp
#include "foo.h"
Foo::Foo(int input1)
{
fooObj1 = input1;
// some code logic to decide the value of fooObj2 (an example)
// so I can't really do member initialization list.
fooObj2 = (fooObj1 % 2 == 0);
}
所以我关注了tutorial,他们告诉我打开[-Weffc++] 并将警告视为错误。但是当我这样做时,[-Weffc++] 会发出警告: 'Foo::fooObj1' should be initialized in the member initialization list [-Weffc++] 和 'Foo::fooObj2' should be initialized in the member initialization list [-Weffc++]。但是我不能在这个项目中真正做成员初始化列表。那么我该如何重新接受这个警告呢?
【问题讨论】:
-
在线教程不值得您为它们支付。获取good book。
-
` 但是我不能在这个项目中做成员初始化列表。` ehm,为什么?它是自 1987 年以来语言的核心特征(它的构想)
-
@Swift-FridayPie 因为嵌套
if-else会使逻辑复杂化,所以不太适合 -
@justANewbie 有效性警告实际上会提示您尽可能避免这种情况。我仍然没有看到问题。无论您需要什么条件初始化,都可以解决,或者您的设计本身就考虑不周。您展示的示例是完全可内联的,如果使用 list 可以静态初始化,您的版本会创建额外的函数调用和代码。
-
@justANewbie 将逻辑包装在一个返回所需值的函数中;
Foo::Foo(int i) : fooObj1(i), fooObj2(complicated_logic(fooObj1)) {}.