2

始める前に、これはスタイルに関する意見の質問ではありません。関数の前にストレージ修飾子を配置する必要がある理由と、実際に配置する必要があるかどうかを知りたいです。哲学的な議論が続きます。

非常に友好的な C++ の文法警官が、オブジェクトの修飾子は、変更する必要があるものの後に常に配置するように教えてくれました。例えば:

int const myint; // good
const int myint; // bad

この考え方は、私は彼または彼女の推論が非常に好きですが、修飾子は常にその前にプロパティを変更するということです。したがって、メソッドを宣言するときの論理規則は次のとおりです。

const int const fun(); // bad
int const fun() const; // good

これが私のやり方であると仮定すると、これについてもう一度議論を始めることなく、関数の前にストレージ修飾子 (static など) を配置する必要があるのはなぜでしょうか? そのため、const 関数と static 関数を隣り合わせにすると、紛らわしいことに次のようになります。

int fun1() const;
static int fun2();

概念的には、このコンテキストの static キーワードと const キーワードには明確に関連する役割があることを考えると (どちらも、関数ができることとできないことを広義に変更します)、同様の文法規則が適用されるべきではないでしょうか? 私はこれを行うことができるようにしたい:

int fun1() const;
int fun2() static; // why doesn't this work?
4

3 に答える 3

0

const関数を実際に変更するのではなく、暗黙的なthisポインターの型を変更します。C++ 型システムに関する限り、すべての関数は不変です (C++ は自己変更コードの言語サポートを提供しません)。

そのため、その位置を戻り値の型または関数修飾子と比較することは意味がありません。

于 2013-09-08T23:01:51.893 に答える