GCC C ++コンパイラは、次のような関数属性を介して拡張機能のファミリを提供します。
int square(int) __attribute__((const));
特に2つの属性、const
およびpure
は、関数の評価に副作用がなく、引数(const
)のみ、または引数とグローバル変数(pure
)のみに依存することを宣言できます。これにより、共通部分式の除去が可能になり、そのような関数がコードに記述されている回数よりも少なく呼び出されるという影響が生じる可能性があります。
私の質問は、これを仮想メンバー関数に安全に、正しく、そして賢明に使用できるかどうかです。
struct Foo
{
virtual int square(int) __attribute__((pure)); // does that make sense?
};
これには意味のあるセマンティクスがありますか?まったく許されますか?それとも単に無視されますか?GCCのドキュメントでこれに対する答えを見つけることができないのではないかと思います。
この質問の理由は-Wsuggest-attribute
、コードを改善するためにそれらの属性を配置できる場所の提案をGCCに生成させるコンパイラオプションのファミリがあるためです。ただ、仮想関数でもそういう提案をしてしまうようで、真剣に受け止めるべきではないかと思います。