ユーザーは、暗黙的に定義されたバージョンと同等の機能を持つ関数を実装することがあります。たとえば、単にすべてのメンバーのコピーコンストラクタを呼び出すコピーコンストラクタです。ユーザー定義関数が暗黙的関数と同等かどうかを自動的に決定
struct A
{
int B;
A(const A& a) : B(a.B) { }
}
それはクラスのメンバーはなど、並べ替え/名前を変更している場合など、追加のメンテナンスを引き起こし、読みやすさを減らすため、これは、望ましくありません。また、これらの関数を追加すると、std::is_trivially_copy_constructable
のような関数は、型を単純にコピーすることはできないと主張しています(実際には実際には可能です)。
私はコードベースを持っていますが、これは一般的なものですが、これらの実装を削除することで修正したいと思います。しかし、暗黙の実装と同じように見える機能を削除することは、実際には同等ではない場合があるため、私は不安です。関数がその暗黙のバージョンと同等かどうかを判断する方法はありますか? (任意のツールセット/言語のバリエーション/ etcの使用は可能です)。
"これらの2つの機能は同じ"または "これらの2つの機能が異なる"というアルゴリズムを作成することは一般的に不可能です。しかし、これらの答えの1つ、または「わからない」アルゴリズムを作成することは可能です。 「よく分からない」とは言わない限り、このようなツールは便利です。 LLVMツールキット(clang)から何かを構築できますか? –
私はLLVMツールキットの経験がありません。 – MuertoExcobito
どちらもありません。静的アナライザーを構築できるツールを提供することを目指していることはわかります。http://llvm.org/特に、http://clang-analyzer.llvm.org/にチェッカーまたはコンパイラの警告です。 –