宣言者。はい、宣言者。それらは多くのコーディング規約の議論の源です。これは議論にとって本当に良いトピックです-C++は、どちらがもう一方よりも優れているかを決定しません(気にしません!)。そして、誰かがあなたをからかうかもしれないことを心配することなく、これらを書くことができます:
int x;
int& a = x;
int &b = x;
int* c = &x;
int *d = &x;
構文的にb
はd
、他のものより「有効」です。名前の前に宣言子修飾子を付ける必要があります。
int m, *n; // m is an int; n is a pointer to int
しかし、流れは1つに有利になっているようです。C ++ 11の可変個引数テンプレートでは、宣言子の位置は、修飾子が基本タイプに近い形式に制限されているようです。
template<typename... Ts>
void VariadicFuncRef(const Ts&... args) { }
^
template<typename... Ts>
void VariadicFuncPtr(Ts*... args) { }
^
これらのフォームを書くのは誤りです:
template<typename... Ts>
void VariadicFuncRef(const Ts... &args) { }
template<typename... Ts>
void VariadicFuncPtr(Ts... *args) { }
具体的な例については、ここをクリックしてください。
それで、私の質問はこれです: なぜ私たちはこの(合法的な)形式に制限され、他の形式を使用できないのですか?
何か考えはありますか?
追加1:この「ルール」が「強制」される理由に関する設計上の決定にも関心があります。