問題タブ [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.
c++ - -Weffc++ からの 1 つの警告の抑制
-Weffc++ フラグを追加すると、コード内に 2 つの実際のバグが既に検出されているため、残しておきたいと思います。残念ながら、次のようになります。
警告は正確です。Aは、基本的に一致ルールRecordSet
のサブセットです。std::vector< Record >
(実際には、それを含むデータ構造と、Record
が持つフィールドの定義を指します。) レコードを更新するときに、元のレコードを更新する必要があるため、ポインター データ メンバーがあります。
https://github.com/c42f/tinyformat/pull/4は、必要な関数を非公開として宣言し、使用しないというアイデアを提供します。残念ながら、私はRecordSet
関数から a を返すようなことをしているので、コピー コンストラクターが実際にデフォルトの動作で存在する必要があります。
理想的なのは、gcc に「はい、本当に、ここで例外が必要ですが、他に問題がある場合は警告してください」と伝えるインライン コメントを見つけることです。
次善の策は、これら 2 つの関数の独自のバージョンを作成して、既定の機能とまったく同じことを行うことです。残念ながら、それらを正確に正しく取得する能力に自信がありません。誰かが標準的な例を教えてもらえますか?
もちろん、最も簡単な方法は、このフラグをオフにすることです。しかし、それが私にとって本当のバグをキャッチしたことを考えると、それは避けたいと思います。
boost - boost::iterator_facade を拡張するときに、イテレータに非仮想デストラクタがあるという警告を削除するにはどうすればよいですか?
-Weffc++ を使用してコンパイルし、boost::iterator_facade を拡張すると、コンパイラの警告が表示されます: 基本クラスに非仮想デストラクタがあります。これを修正するにはどうすればよいですか?
サンプルコードは次のとおりです。
Fedora 19 で次のようにコンパイルします。
実際の警告は次のとおりです。
ありがとう。
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++]
. しかし、このプロジェクトではメンバーの初期化リストを実際に行うことはできません。では、どうすればこの警告を取り消すことができますか?