問題タブ [const-reference]
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++ - これは標準に従って有効なC++コードですか?
私はこのサンプルコードを持っています:
Test
基本的に、一時変数へのconst参照を格納し、それをmethofで使用するコンストラクターについて心配していf
ます。一時オブジェクト参照は内部で有効なままですf
か?
c++ - 暗黙の変換 : const 参照 vs 非 const 参照 vs 非参照
このコードを考えてみましょう。
これは正常にコンパイルされ、正常に実行されます。しかし、に変更f(B)
するとf(B&)
、コンパイルされません。私が書いた場合f(const B&)
、それは再び正常にコンパイルされ、正常に実行されます。その理由と根拠は?
概要:
これらのケースのそれぞれについて、言語仕様からの理由、理論的根拠、および参照を聞きたいと思います。もちろん、関数のシグネチャ自体は間違っていません。暗黙的にandにA
変換されますが、 には変換されず、コンパイル エラーが発生します。B
const B&
B&
c++ - 非constrefが選択されたコピーコンストラクターを持つパラメータータイプの関数?
is_callable<F, Args...>
少し前に、トレイトを書きたいときに、いくつかのコードの次の動作に混乱しました。過負荷の解決では、非定数refによる引数を受け入れる関数は呼び出されませんよね?コンストラクターが必要なため、次のように拒否しないのはなぜTest&
ですか?かかると思っていましたf(int)
!
エラーメッセージは
一方が機能するのにもう一方が機能しない理由を説明していただけますか?
c++ - c'tor初期化子リストのconst参照に一時的にバインドしています
C++03 のセクション 12.2.5 には、「コンストラクターの ctor-initializer (12.6.2) の参照メンバーへの一時的なバインドは、コンストラクターが終了するまで持続する」と書かれている
ので、次のプログラムを試しました。
私が得る出力は次のとおりです。
現在、標準によれば、バーの c'tor の c'tor init-list で foo() によって一時的に生成されたものは、バーの c'tor の後に破棄されるため、後に出力するfoo d'tor
必要がありますbar c'tor
が、逆です。
理由を説明してください。
c++ - 右辺値への参照をconstするクラスデータメンバーの寿命は?
一般に、この議論はローカル関数変数のみです。
しかし、このルールはclass
メンバーにも適用されますか?
現在A
は、
の内容は 、割り当てられた 3 つの lyすべての有効期間を通じてa
同じままになりますか? new
A
c++ - C ++:列挙型を値またはconst参照として渡す方が良いですか?
ここには2つの関連する質問があります。
A)列挙型はどのように実装されますか?たとえば、私がコードを持っている場合:
実際に何が起こっているのですか?TYPE_1とTYPE_2をintとして扱うことができることは知っていますが、実際には単なるintですか?
B)その情報に基づいて、渡された列挙型を変更する必要がないと仮定すると、myTypeを値またはconst参照として関数に渡す方が理にかなっていますか?
たとえば、どちらがより良い選択です:
また
c++ - 警告 C4172: ローカル変数にバインドされた const std::string への参照を返しています。どのくらい安全ですか?
私は仕事で私たちのプロジェクトの 1 つを構築していたところ、新しい機能が追加されたことがわかります。
コンパイラは警告を出します:
警告 C4172: ローカル変数または一時のアドレスを返す
コンパイラは正しいと思います。この機能は安全ですか?
const char*
関数は、文字列リテラルが静的な保存期間を持っている限り、OK を返さないことに注意してください。への参照を返しますconst std::string
c++ - 一時的に寿命が延びるのを防ぎますか?
これは不可能かもしれませんが、一時的なものが元の表現を超えて永続しないようにすることができるかどうか疑問に思っていました. 親オブジェクトを指すオブジェクトのチェーンと、子オブジェクトを作成するメンバー関数があります。簡単な例はこちら
私が使用したい方法person
は、それを関数に渡すことです。次のようなものです。
結構です。
元の式を超えて存続する一時変数がない限り、これは正常に機能しますが、最終的な一時変数の 1 つを const 参照にバインドすると、その親が存続せず、セグメンテーション違反が発生します。のコピー コンストラクタと代入演算子を非表示にすることはperson
できますが、この種のエラーの発生を防ぐ方法はありますか? 可能であれば、動的割り当ては避けたいと思います。
c++ - インライン関数の引数の受け渡し
インライン関数がconst 参照で引数を渡すためにパフォーマンスが必要ですか?
値で比較
関数の a と b の値を変更しないとどうなりますか? C++11 の変更により、ここで具体的に何かが推奨されますか?