问题标签 [weffc++]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
920 浏览

c++ - 抑制来自 -Weffc++ 的一个警告

添加 -Weffc++ 标志已经在我的代码中发现了 2 个真正的错误,所以我想保留它。不幸的是,它会导致以下结果:

警告是准确的。ARecordSet基本上是std::vector< Record >匹配规则的子集。(我实际上指向包含它的数据结构,以及 a 具有哪些字段的定义Record。)它具有指针数据成员,因为当我更新记录时,我需要更新原始记录。

https://github.com/c42f/tinyformat/pull/4提供了将必要的函数声明为私有的想法,然后不使用它们。不幸的是,我做了诸如RecordSet从函数返回 a 之类的事情,所以我需要复制构造函数以默认行为实际存在。

理想的情况是找到某种内联注释,告诉 gcc 是的,真的,我想要一个例外,但请警告我其他任何问题。

下一个最好的方法是编写我自己的这两个函数的版本,它们的功能与默认值完全相同。不幸的是,我对自己完全正确的能力没有信心。有人可以指出一个典型的例子吗?

当然,最简单的方法是关闭此标志。但鉴于它为我捕获了真正的错误,我想避免这种情况。

0 投票
1 回答
716 浏览

boost - 如何在扩展 boost::iterator_facade 时删除我的迭代器具有非虚拟析构函数的警告?

使用 -Weffc++ 编译并扩展 boost::iterator_facade 时,我收到编译器警告:基类具有非虚拟析构函数。我能做些什么来解决这个问题?

这是示例代码:

我在 Fedora 19 上编译如下:

这是实际的警告:

谢谢。

0 投票
1 回答
550 浏览

c++ - 返回 *this 会给出 Weffc++ 警告

我在这里有一些代码,我正在使用 -Weffc++ -Wall -Wextra 进行编译。

基本上我有这个片段:

我收到警告:warning: 'operator=' should return a reference to '*this' [-Weffc++]。我真的不知道该怎么做这个警告。我已经读到这完全没问题(即返回一个尊重的 this)。

有没有办法让我的编译器满意?

0 投票
1 回答
98 浏览

c++ - 忽略特定代码的 weffc++ 初始化列表顺序警告

我有以下代码:

我正在使用标志“-Weffc++”进行编译。我收到警告“测试需要在初始化列表中进行初始化。”
但我不能这样做,因为我需要做很少的计算来生成测试值。

所以为了避免这个错误,我确实尝试了'-Wno-reorder'标志,但它没有用。我也不喜欢它,因为它会为所有代码禁用此警告,我只想针对这种特定情况禁用此警告。

我还使用'#pragma GCC diagnostic ignore -Weffc++' 来完成它,它放在 cpp 文件中的构造函数之前,它确实有效。但是我需要在所有要避免此警告的构造函数中添加编译指示。

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

0 投票
0 回答
621 浏览

c++ - 使用 Effective C++ 使用模板重载等于运算符

我正在将旧的 C++ 代码移植到有效的 C++ 安全版本。我读到了有关此标志的问题,但由于我没有选择是否要这样做,因此必须这样做。在使用模板时,我遇到了重载等于运算符的问题。

我试图将功能从头文件移动到实际的 cpp,但这没有任何效果。删除模板有效,但由于需要模板,它只是告诉我问题出在哪里。

编译此代码会引发以下错误:

指向准确的线return *this;

MyClass 不继承任何其他类。这是一个 effc++ 错误还是我遗漏了什么?

0 投票
4 回答
85 浏览

c++ - 修复警告:'Foo::fooObj1' 应该在成员初始化列表中初始化 [-Weffc++]

foo.h

foo.cpp

所以我正在关注一个教程,他们告诉我打开[-Weffc++]并将警告视为错误。但是当我这样做时,请[-Weffc++]发出警告: 'Foo::fooObj1' should be initialized in the member initialization list [-Weffc++]'Foo::fooObj2' should be initialized in the member initialization list [-Weffc++]. 但是我不能在这个项目中真正做成员初始化列表。那么我该如何重新接受这个警告呢?