[解決済み] 新しい C++11 プログラムでは、末尾の戻り値の構文スタイルがデフォルトになるべきですか?[クローズド]
質問
C++11 では、新しい関数構文がサポートされています。
auto func_name(int x, int y) -> int;
現在、この関数は次のように宣言されます。
int func_name(int x, int y);
新しいスタイルはまだ広く採用されていないようです (例えば gcc stl では)。
しかし、この新しいスタイルは、新しい C++11 プログラムのあらゆる場所で優先されるべきなのでしょうか、それとも必要な場合にのみ使用されるのでしょうか。
個人的には、可能であれば古いスタイルを好みますが、スタイルが混在するコードベースはかなり醜く見えます。
どのように解決するのですか?
末尾の戻り値の型を使用しなければならない場合があります。 最も顕著なのは、ラムダの戻り値型を指定する場合、末尾の戻り値型を介して指定する必要があることです。 また、戻り値の型が
decltype
を利用する場合、末尾のリターン型を使用しなければなりません (ただし、通常は
declval<T>
を使ってこの後者の問題を回避することができます)。
末尾の戻り値型には、他にもいくつかの小さな利点があります。 例えば、伝統的な関数構文を使用した非インラインのメンバー関数定義を考えてみましょう。
struct my_awesome_type
{
typedef std::vector<int> integer_sequence;
integer_sequence get_integers() const;
};
my_awesome_type::integer_sequence my_awesome_type::get_integers() const
{
// ...
}
メンバ型定義は,クラス名が表示される前に
::get_integers
の前に現れるまではスコープされないので、クラス名を2回繰り返さなければなりません。 もし、末尾にreturn型を使用すれば、型の名前を繰り返す必要はありません。
auto my_awesome_type::get_integers() const -> integer_sequence
{
// ...
}
この例では、それほど大きな問題ではありませんが、長いクラス名やクラステンプレートのメンバー関数がインラインで定義されていない場合、可読性に大きな差が出ることがあります。
彼の "フレッシュ ペイント" C++Now 2012 のセッションで、Alisdair Meredith は、末尾の戻り値の型を一貫して使用すると、すべての関数の名前がきちんと並ぶと指摘しました。
auto foo() -> int;
auto bar() -> really_long_typedef_name;
のいたるところで、末尾のリターン型を使っています。
CxxReflect
で、一貫してそれを使ったコードの例を探しているなら、そこを見てください (例えば
は
type
クラス
).
関連
-
[解決済み】C++エラーです。"配列は中括弧で囲まれたイニシャライザーで初期化する必要がある"
-
[解決済み】C++でランダムな2倍数を生成する
-
[解決済み】「corrupted size vs. prev_size」glibc エラーを理解する。
-
[解決済み】cc1plus:エラー:g++で認識されないコマンドラインオプション"-std=c++11"
-
[解決済み】「Expected '(' for function-style cast or type construction」エラーの意味とは?
-
[解決済み】エラー:free(): 次のサイズが無効です(fast)。
-
[解決済み】警告 - 符号付き整数式と符号なし整数式の比較
-
[解決済み] C++11の新しい構文「= default」について
-
[解決済み] 型名の後の括弧は、newで違いがあるのでしょうか?
-
[解決済み] 関数/メソッドのキーワード 'inline' はいつ書けばよいのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】構造体のベクター初期化について
-
[解決済み】C++でランダムな2倍数を生成する
-
[解決済み】エラー:strcpyがこのスコープで宣言されていない
-
[解決済み】エラー。switchステートメントでcaseラベルにジャンプする
-
[解決済み] 式はクラス型を持つ必要があります。
-
[解決済み】指定範囲内の乱数で配列を埋める(C++)
-
[解決済み】浮動小数点数の乱数生成
-
[解決済み] gdbを使用してもデバッグシンボルが見つからない
-
[解決済み】変数やフィールドがvoid宣言されている
-
[解決済み】Eclipse IDEでC++エラー「nullptrはこのスコープで宣言されていません」が発生する件