У меня есть код ниже:
class Base {
// Some code
Base(int y) {}
}
class Derived : Base {
int test;
Derived(int x);
}
Derived::Derived(int x) : Base(x) {
// Some code and calculation to generate vale of test
test = val;
}
Я компилирую с флагом ‘-Weffc ++’.
И я получаю предупреждение «тест должен быть инициализирован в списке инициализации».
Но я не могу этого сделать, так как мне нужно сделать несколько расчетов, чтобы получить значение теста.
Поэтому, чтобы избежать этой ошибки, я попробовал флаг ‘-Wno-reorder’, но он не работал. Также я не предпочитаю это, поскольку это отключит это предупреждение для всего кода, я просто хочу отключить это предупреждение для этого конкретного случая.
Я также сделал это, используя ‘#pragma GCC диагностическое игнорирование -Weffc ++’, помещенное непосредственно перед конструктором в файле cpp, и это сработало. Но мне нужно добавить прагму ко всем конструкторам, где я хочу избежать этого предупреждения.
Но есть ли лучший способ избежать предупреждения порядка инициализации списка инициализации Weffc ++ для конкретного кода. Или есть способ исправить это предупреждение?
Derived::Derived(int x) : Base{ x }, test{} // shut up the compiler.
{
// Some code and calculation to generate vale of test
test = val;
}
Других решений пока нет …