[解決済み】C++11のautoキーワードはどこまでがやりすぎ?
2022-04-03 09:09:08
質問
私はこれまで、新しい
auto
キーワードは、C++11 標準で、複雑なテンプレート化された型のために設計されたと思います。しかし、私はこのキーワードを次のようなことにも使っています。
auto foo = std::make_shared<Foo>();
そして、より懐疑的に向けて。
auto foo = bla(); // where bla() return a shared_ptr<Foo>
このテーマに関する議論はあまり見たことがありません。それは、どうやら
auto
型はしばしば文書化およびサニティチェックの一形態であるため、使いすぎの可能性があります。を使うことの線引きはどこにあるのでしょうか?
auto
また、この新機能の推奨ユースケースは何でしょうか?
私は、標準化委員会がこのキーワードをどのように使用することを意図しているか、また、その意図する使用が実際にどのように実現されているかについてのコメントを求めているのです。
どのように解決するのか?
を使うべきと思います。
auto
キーワードは、一見すると型をどう書けばいいのかわからないが、式の右辺の型は明らかである場合に使う。例えば、使用する。
my_multi_type::nth_index<2>::type::key_type::composite_key_type::
key_extractor_tuple::tail_type::head_type::result_type
で複合キーの型を取得します。
boost::multi_index
であることが分かっていても
int
. と書くことはできません。
int
なぜなら、将来変更される可能性があるからです。私ならこう書きます。
auto
この場合
ということは、もし
auto
キーワードは、特定のケースで読みやすさを向上させるために使用します。次のように書くことができます。
auto
がどのような型であるかが読者に明らかな場合
auto
を表します。
以下はその例です。
auto foo = std::make_shared<Foo>(); // obvious
auto foo = bla(); // unclear. don't know which type `foo` has
const size_t max_size = 100;
for ( auto x = max_size; x > 0; --x ) // unclear. could lead to the errors
// since max_size is unsigned
std::vector<some_class> v;
for ( auto it = v.begin(); it != v.end(); ++it )
// ok, since I know that `it` has an iterator type
// (don't really care which one in this context)
関連
-
[解決済み] 数値定数の前にunqualified-idを付けて、数値を定義することを期待する。
-
[解決済み] C++のautoキーワード。なぜ魔法なのか?
-
[解決済み] explicit キーワードの意味は?
-
[解決済み] 文字列の単語を反復処理するにはどうすればよいですか?
-
[解決済み] 1ビットのセット、クリア、トグルはどのように行うのですか?
-
[解決済み] 要素ごとの加算は、結合ループよりも分離ループの方がはるかに高速なのはなぜですか?
-
[解決済み] C++11では、標準化されたメモリモデルが導入されました。その意味するところは?そして、C++プログラミングにどのような影響を与えるのでしょうか?
-
[解決済み] なぜC++はPythonよりもstdinからの行の読み込みが遅いのですか?
-
[解決済み] Linux上で動作するC++コードのプロファイリングを行うにはどうすればよいですか?
-
[解決済み】C++でnewキーワードはいつ使うべきですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】 unsigned int vs. size_t
-
[解決済み】構造体のベクター初期化について
-
[解決済み] error: 'ostream' does not name a type.
-
[解決済み】致命的なエラー LNK1169: ゲームプログラミングで1つ以上の多重定義されたシンボルが発見された
-
[解決済み】C++ 式はポインタからオブジェクトへの型を持っている必要があります。
-
[解決済み] string does not name a type Errorが発生するのはなぜですか?
-
[解決済み] 非静的データメンバの無効な使用
-
[解決済み】C++ - ステートメントがオーバーロードされた関数のアドレスを解決できない。
-
[解決済み】Visual Studioのデバッガーエラー。プログラムを開始できません 指定されたファイルが見つかりません
-
[解決済み] 変数サイズのオブジェクトが初期化されないことがある c++