問題タブ [temporaries]
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++での一時的な呼び出しの連鎖
文字列を変換するクラスがあります。
だから私はサブクラスを作成することができます
そして、変換を使用できます。
このためのより良いデザインはありますか?可能であれば動的allocation/shared_ptrの使用を避けたいのですが、通話中に一時的なものが存続するかどうかはわかりません。また、破壊中にそれぞれが親と会話できるようにしたいtranser
ので、一時的なものも正しい順序で破壊する必要があります。連鎖変換を作成して後で使用するために保存することも困難です。
もはや存在しない一時的なものへのポインタを保存します。のようなことをする
安全ですが、迷惑です。このような連鎖操作を行うためのより良い方法はありますか?
c++ - 一時的に寿命が延びるのを防ぎますか?
これは不可能かもしれませんが、一時的なものが元の表現を超えて永続しないようにすることができるかどうか疑問に思っていました. 親オブジェクトを指すオブジェクトのチェーンと、子オブジェクトを作成するメンバー関数があります。簡単な例はこちら
私が使用したい方法person
は、それを関数に渡すことです。次のようなものです。
結構です。
元の式を超えて存続する一時変数がない限り、これは正常に機能しますが、最終的な一時変数の 1 つを const 参照にバインドすると、その親が存続せず、セグメンテーション違反が発生します。のコピー コンストラクタと代入演算子を非表示にすることはperson
できますが、この種のエラーの発生を防ぐ方法はありますか? 可能であれば、動的割り当ては避けたいと思います。
c++ - const として動作しない一時変数
以下に示す式で、一時的に const の型が想定されているかどうかは不明です。
X(3)
非 const のように動作します ( を呼び出すことができるためoperator+
、一方、X(4)
const のように動作します ( には const 引数が必要なためoperator+
)。
誰かが明確にすることができますか、正しい理解とは何ですか?
python - Pythonのリスト内包表記内の式の参照値?
次のようなリスト内包表記がある場合
ここで一度mymap.get(x,None)
だけ行う方法はありますか?
のようなものを想像します
しかし、現在これはSyntaxError
py 2.xです。リスト内包表記の「式」またはその「list_if」部分の結果の値を参照できるようにしたいと考えています。
私も試してみました
しかし、それは、行上の一部のインタープリター機能にすぎないNameError
と思います。_
編集
リストを反復せずに、この一時的/匿名/名前のない変数を参照する方法はありますか?
c++ - Eigen::CwiseBinaryOp から MatrixXd へのキャストで segfault が発生する
必要な複雑な計算を行うために、メンバー変数として Eigen 式テンプレートを格納するライブラリを作成しています。ただし、MatrixXd などで直接変換しない限り、これらの式テンプレートを保存または返すことができないようです。これにより、すべてのステップが一時的に保存され、設計全体の効率が損なわれます。
問題の原因となる短い例を次に示します。ホルダーは固有行列を保持するだけで、Summer は 2 つのホルダーを取得し、get() を呼び出すと、それらが保持する 2 つの行列の合計を出力します。次のテストは、合計式テンプレートが行列に評価されると失敗します (segfault または std::bad_alloc)。
インクルードファイル
簡単なテスト
- インクルード ファイルでは、代わりにコメント アウトされた typedef を使用すると、正常に動作します。
- 問題はぶら下がっている参照によるものだと思われますが、それを証明することはできません。
c++ - コンパイラは、コンパイラが生成した一時変数を使用して、関数に必要なスタック サイズをどのように決定しますか?
次のコードを検討してください。
getFoo() が呼び出される行で、コンパイラは cFoo の一時オブジェクトを生成し、doSomething1() を呼び出せるようにします。コンパイラは、これらの一時オブジェクトに使用されるスタック メモリを再利用しますか? 「some_function_in_the_callstack_hierarchy」の呼び出しで確保されるスタック メモリの数は? 生成された一時ごとにメモリを予約しますか?
私の推測では、コンパイラは cFoo の 1 つのオブジェクトに対してのみメモリを予約し、別の呼び出しに対してメモリを再利用しますが、追加すると
「some_function_in_the_callstack_hierarchy」に必要なスタック サイズは、追加のローカル int 変数のためだけでなく、はるかに大きいことがわかります。
一方、私が次に交換する場合
参照付き (プライベート メンバーへの参照を返すのは良くないため、テスト目的のみ)
1 つの cFoo のサイズよりもはるかに少ないスタック メモリが必要です。
したがって、コンパイラは、関数内で生成されたすべての一時オブジェクトに対して追加のスタック メモリを予約しているようです。しかし、これは非常に非効率的です。誰かがこれを説明できますか?