問題タブ [temporary-objects]
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++/V8 非静的関数を呼び出す便利な方法 / 一時インスタンスの作成
これを有効にする方法を探しています(これは機能します):
このようなものに:
私は試しました:
しかし、うまくいきません。
[@Xeo]
V8からのこのクラスです。
http://bespin.cz/~ondras/html/classv8_1_1HandleScope.html
反対票を投じる場合は、少なくとも反対票を投じる理由を説明してください。
c++ - 一時値と戻り値の最適化への const 参照
右辺値を const 左辺値参照に割り当てると、一時的な有効期間がスコープの終わりまで延長されるという事実を認識しています。ただし、いつこれを使用し、いつ戻り値の最適化に頼るべきかは明確ではありません。
Scot Meyers の「より効果的な C++ (項目 20)」によると、2 番目の方法はコンパイラによって最適化され、オブジェクトをその場で構築できます (これは理想的でありconst&
、最初の方法で達成しようとするものとまったく同じです)。
const&
一時的に使用する場合、および RVO/NRVO に依存する場合に、一般的に受け入れられているルールまたはベスト プラクティスはありますか?const&
メソッドを使用しないよりも使用する方が悪い状況はありますか? (たとえば、C++ 11の移動セマンティクスが実装されている場合について考えLargeObject
ています...)
c++ - 値渡しは常に const ですか?
このコードはコンパイルされません:
行のコンパイル エラー (GCC 4.1.2) foo(bar())
:
タイプ 'C' のテンポラリからのタイプ 'C&' の非 const 参照の無効な初期化
Asはオブジェクトをbar()
返し、mutable
コンパイルする必要があります...
なぜ C++ は上記のコードを許可しないのですか?
編集:すべての回答からのすべての良いアイデアの下に回答をまとめました;-)
c++ - 一時オブジェクトへの非 const 参照ではないのはなぜですか?
C++ では、一時オブジェクトを const 参照にのみ割り当てることができます。参照する一時オブジェクトの割り当てを許可しません。
例えば:
この結果をグーグルで検索しても、次の回答しか表示されません
- 一時オブジェクトを変更すると、識別できない問題が発生する可能性があります
- 一時オブジェクトの変更は危険です
- ある時点で、それが一時変数であることを忘れるでしょう
一時オブジェクトはステートメントの後に消えると言われています。したがって、変更しないでください。
C++ が一時オブジェクトの変更をブロックすることに非常に熱心である場合、一時オブジェクトの読み取りをブロックする必要がありますか? 一時オブジェクトが消失した場合、そこから内容を読み取っても意味がありませんよね? 権利が発生する可能性のあるケースには、読み取りも含まれる可能性があります。
では、なぜ書き込みのみをブロックし、読み取りを許可しているのでしょうか?
しっかりとしたC++コードの説明をお願いします。
いくつかの代替案を指摘して質問を逸脱しないでください。const int & が許可され、 int & が一時オブジェクトに許可されない理由をコードで明確に答えてください。
&&がそこにあると言う..私の質問は違う..別の言い方をすると、変更しても反映されない.. const int & tooであっても、変更しても反映されません。例: ダブル a; 定数 int & i = a; ++; 影響しません。
c++ - 寿命延長と条件演算子
const へのローカル左辺値参照と右辺値参照は、一時変数の有効期間を延長できます。
初期化子が単純な式ではなく、条件演算子を使用している場合にも機能しますか?
結果の 1 つが一時オブジェクトで、もう 1 つがそうでない場合はどうなるでしょうか。
C++ は、条件が false の場合に一時的な有効期間を延長することを義務付けていますか?
コピー不可能なオブジェクトに関するこの質問に答えているときに、質問が出てきました。
c++ - オブジェクトと逆参照ポインタについて混乱しています
オブジェクトのインスタンスを渡すことと、逆参照されたオブジェクトを渡すことの違いはわかりません。私は持っています
上記の呼び出しは、コンパイラエラーでは機能しません。
しかし、私が書くなら
します。
呼び出したいメソッドを変更できない場合、問題の理由と解決方法を教えてもらえますか?
c++ - 一時的な ostream オブジェクトに関する c++ の問題
私はこの作業コードを変換することを考えました:
これに:
言い換えれば、私は「匿名」または名前のないバージョンの ofstream オブジェクトを使用します。
2 つの質問:
(1) 2 回目の試行が失敗するのはなぜですか?
(2) 2 番目の試みは文体的にも優れていますか、それとも C++ ではすべてを明示的に名前を付けたままにしておく方がよいでしょうか? 私は、オブジェクトが常にオンザフライで作成される Python のバックグラウンドを持っています。
ありがとう!!
c++ - forループでのpIter!= cont.end()のパフォーマンス
私は最近ハーブサッターによる「例外的なC++」を通り抜けていました、そして私は彼がアイテム6-一時的なオブジェクトで与える特定の推薦について深刻な疑いを持っています。
彼は、次のコードで不要な一時オブジェクトを見つけることを提案しています。
emps.end()
例の1つとして、反復ごとに一時オブジェクトが作成されるため、ループの前の値を事前に計算することをお勧めします。
ほとんどのコンテナ(リストを含む)の場合、end()を呼び出すと、構築および破棄する必要のある一時オブジェクトが返されます。値は変更されないため、ループの反復ごとに値を再計算(および再構築して再破棄)することは、不必要に非効率的であり、美的ではありません。値は1回だけ計算し、ローカルオブジェクトに保存して、再利用する必要があります。
そして彼は次のように置き換えることを提案します:
私にとって、これは不必要な合併症です。醜い型宣言をcompactに置き換えても、1auto
行ではなく2行のコードを取得します。さらに、彼はこのend
変数を外部スコープに持っています。
私は実際にconst_iterator
ここで使用しており、ループのコンテンツが何らかの形でコンテナにアクセスしているかどうかを簡単に確認できるため、最近のコンパイラはこのコードを最適化すると確信していました。コンパイラは過去13年以内に賢くなったでしょう?
とにかく、私はi != emps.end()
ほとんどの場合、パフォーマンスについてそれほど心配していない最初のバージョンを好みます。しかし、私は確かに、これが最適化するためにコンパイラに頼ることができる一種の構造であるかどうかを知りたいですか?
アップデート
この役に立たないコードをより良くする方法についてのあなたの提案に感謝します。私の質問は、プログラミング技術ではなく、コンパイラに関するものであることに注意してください。今のところ、関連する唯一の回答はNPEとElliohからのものです。