【问题标题】:Ignoring weffc++ initialization list order warning for specific code忽略特定代码的 weffc++ 初始化列表顺序警告
【发布时间】:2018-11-30 05:20:03
【问题描述】:

我有以下代码:

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 diagnostic ignore -Weffc++' 来完成它,它放在 cpp 文件中的构造函数之前,它确实有效。但是我需要在所有要避免此警告的构造函数中添加编译指示。

但是有没有更好的方法来避免特定代码的 Weffc++ 初始化列表顺序警告。或者有没有办法解决这个警告?

【问题讨论】:

  • “但我不能这样做,因为我需要做一些计算来生成测试值” - 你仍然可以这样做:test([]{ /* calculations here */; returrn result;}())
  • 不仅计算我需要连接一些外部库和一些初始化代码来生成值,所以把整个代码放在那里也不是一个好主意,还有更多的变量使用相同的代码用于初始化。

标签: c++ initializer-list weffc++


【解决方案1】:
Derived::Derived(int x) : Base{ x }, test{} // shut up the compiler.
{
    // Some code and calculation to generate vale of test
    test = val;
}

【讨论】:

  • 是的,我已经尝试过了,但它看起来不太好,因为我们有代码初始化相同的验证器两次。
  • @User7723337 初始化列表是初始化某些东西(因此得名 ^^)的唯一机会,然后是赋值。
猜你喜欢
  • 2012-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-22
  • 1970-01-01
  • 2017-03-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多