問題タブ [auto]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - autoで配列を宣言する方法
私は遊んでいてauto
、ほとんどの場合、変数定義を置き換えてauto
から型を割り当てることができることに気付きました。
次のコードではw
、 とx
は同等です (デフォルトでは初期化int
されていますが、潜在的なコピーには入りません)。z
と同じ型を持つように宣言する方法はありy
ますか?
c++ - C++11 範囲ベースの for ループ効率 "const auto &i" 対 "auto i"
C++11 では、次のようにいくつかのコンテナーを反復処理できます。
しかし、これは不必要に-不必要に、の値を出力するだけでよいのでvec
-のコピーを作成することを知っているvec
ので、代わりに次のことができます:
vec
しかし、の値が決して変更されず、const-correctness に準拠していることを確認したいので、次のことができます。
したがって、私の質問は次のとおりです。あるコンテナーの値のみを確認する必要がある場合、 ( EDIT : の各要素)const auto &i
の余分なコピーを持たないことで効率が向上するため、最後のループ ( ) が常に優先されるのではないでしょうか?vec
私は開発中のプログラムを持っていますが、この変更を全体的に行うことを検討しています。これは、効率が重要であるためです (最初に C++ を使用している理由)。
c++ - 自動ループと最適化
次のコード(最適化されていない)で計算時間にこのような違いがある理由を教えてください。RVO と move-construction の違いを疑っていますが、よくわかりません。
一般的に、そのようなケースに遭遇したときのベストプラクティスは何ですか? 非PODデータを初期化するとき、ループ内の自動宣言は悪い習慣と見なされますか?
ループ内で auto を使用する:
出力:
./a.out 0.17s ユーザー 0.00s システム 97% CPU 0.177 合計
ループ外のベクトル インスタンス :
出力:
./a.out 0.32s ユーザー 0.00s システム 99% CPU 0.325 合計
c++ - 関数テンプレートで反復子の型を推測しますか?
テンプレートを使用して引数の型を既に推測している関数で、反復子の型を推測しようとしています。私が達成しようとしているのは、 C++11標準で同様の機能を持つキーワードautoの置換です。もともと私は次の機能を持っていました:
これは、 C++11標準のコンパイルで完全に機能します。しかし、状況が変わり、そのような機能を使用できなくなりました。
キーワードautoなしで機能的に同じことを達成しようとしています。そこで、テンプレートを考えました。
これまでのところ、私が試したことは次のとおりです。
これをどのように解決しますか?
注: 通常、この関数を次の型で呼び出します。
さまざまなタイプのベクトルをインスタンス化する必要があるためです。
c++ - 関数のオーバーロードに auto を使用できないのはなぜですか?
使用はオーバーロードの高く評価されている方法の 1 つであることは理解していますtemplates
が、なぜauto
関数パラメーターの型推定に使用できないので、関数のオーバーロードを支援するのか疑問に思っていました。
N3690
7.6.1.4/3 で、auto を使用してラムダ式を汎用にすることができると述べており、この例を提供しています
(注: これは N3485 には記載されていません)
1).なぜ私は通常の関数に対して同様のことを行うことができないのですか?
これによりエラーが発生しerror : parameters declared auto
ます。
N3690 7.1.6.4/4 から
auto または decltype(auto) を使用して宣言された変数の型は、その初期化子から推測されます。この使用は、ブロック (6.3)、名前空間スコープ (3.3.6)、および for-init-statement (6.5.3) で変数を宣言するときに許可されます。[...]
param1
andparam2
がブロック スコープに該当し、自動控除の対象になると仮定するのは間違っていますか?
2)。そのような機能が許可されている場合、落とし穴は何でしょうか?
私はgcc 4.8.1を使用しています。
ありがとうございました