問題タブ [temporary]
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.
vim - (g)Vim でテキストの列を非表示 (または折りたたむ) (水平方向)
Vim で編集中にバッファ (テキスト ファイル、意味がわかります) の列を非表示にする方法はありますか? たとえば、列 2 と 3 を非表示にする前にバッファに表示されるテキスト:
そしてそれらを隠した後:
(言うまでもなく、私は非常に巨大なファイル (時には 200 GB 以上) を扱っています)。
そうです、foldcol.vim を見つけましたが、パッチが必要で、サーバー上でユーザーとしてコンパイルするための gcc がありません。
前もって感謝します。
c++ - C++列挙型がコンパイラによって正しく認識されない
次のコードがコンパイルされない理由を誰かが説明できますか(g ++(GCC)3.2.3 20030502(Red Hat Linux 3.2.3-49))?
私が受け取るメッセージは次のとおりです。
jjj.cpp:関数内'int main()':
jjj.cpp:10:'XX ::A'は'structX'の静的メンバーではありません
jjj.cpp:10:'Xの呼び出しに一致する関数がありません: :X()'
jjj.cpp:1:候補は次のとおりです:X :: X(const X&)
jjj.cpp:5:X :: X(X :: State) `
これは悪いコードですか、それともコンパイラのバグですか?
Neil+Konradによって解決された問題。以下のニールの答えへのコメントを参照してください。
c++ - 参照による一時オブジェクトと引数を使用するルール
クラスがあるとします:
そして関数:
そして私は:
一時オブジェクトの参照による受け渡しに関するルールを誰かに説明してもらえますか? コンパイラが許可するもの、const が必要な場所、暗黙のコピーが発生した場合などに関して、いじってみると、意味のある const が必要なように見えますが、これらすべてに関する正式なルールはありますか?
ありがとう!
c++ - 一時的な const 参照
Herb Sutter のブログでこの記事を読んだ後、少し実験してみたところ、私を困惑させる何かに出くわしました。私は Visual C++ 2005 を使用していますが、これが実装に依存しているとしたら驚きです。
これが私のコードです:
実行すると、「~Base()
」が2回表示されます...しかし、コンストラクターのコメントを外すと、1回だけ表示されます!
誰もこれについて説明がありますか?
c++ - Visual C++ コンパイラがここで間違ったオーバーロードを呼び出すのはなぜですか?
Visual C++ コンパイラがここで間違ったオーバーロードを呼び出すのはなぜですか?
フォーマット用のバッファを定義するために使用する ostream のサブクラスがあります。一時的なものを作成し、次のような通常の << 演算子を使用してすぐに文字列を挿入したい場合があります。
残念ながら、このプログラムは、operator<<(ostream, const char *) 非メンバー オーバーロードではなく、operator<<(ostream, void *) メンバー オーバーロードを呼び出します。
問題を再現する独自の M2Stream クラスを定義するテストとして、以下のサンプルを作成しました。
問題は、 M2Stream() 式が一時的なものを生成し、これにより何らかの形でコンパイラが void * オーバーロードを優先することだと思います。しかし、なぜ?これは、非メンバー オーバーロード const M2Stream & の最初の引数を作成すると、あいまいさが生じるという事実によって裏付けられています。
もう 1 つの奇妙な点は、次のように、リテラル char 文字列の代わりに、最初に const char * 型の変数を定義してから呼び出すと、目的の const char * オーバーロードが呼び出されることです。
リテラル文字列が const char * 変数とは異なる型を持っているかのようです! それらは同じであるべきではありませんか?また、一時文字列とリテラル char 文字列を使用すると、コンパイラが void * オーバーロードを呼び出すのはなぜですか?
出力:
c++ - 一時オブジェクトの作成を禁止する
マルチスレッドアプリケーションでクラッシュをデバッグしているときに、最終的に次のステートメントで問題を特定しました。
CSingleLock クラスの名前のないオブジェクトを作成しているため、このステートメントの直後にクリティカル セクション オブジェクトのロックが解除されることに注意してください。これは明らかに、コーダーが望んでいたことではありません。このエラーは単純な入力ミスが原因でした。私の質問は、コンパイル時にクラスの一時オブジェクトが作成されるのを防ぐことができる方法があるかどうかです。つまり、上記のタイプのコードはコンパイラエラーを生成するはずです。一般に、クラスがある種のリソース取得を試みるときはいつでも、そのクラスの一時オブジェクトは許可されるべきではないと思います。それを強制する方法はありますか?
c++ - 参照メンバーへのこのC++の一時的なバインドは違法である必要がありますか?
私の質問(この後、長いイントロについて申し訳ありませんが、質問は太字で示されています)は、元々、Herb Sutters Exceptional C ++のアイテム23に触発されており、次のようなものがあります:
<snip>
と
</ snip>
さて、私はそのコードに関して次の問題を抱えています(そして、いいえ、C ++の専門家としてのSutter氏の腕前に疑いの余地はありません):
- GTAClient&workerは一時的なものをとることができない非定数参照であるため、このような例は機能しませんが、標準以前に記述されているか、タイプミスである可能性があります。それは私のポイントではありません。
- 問題1が無視されたとしても、彼がワーカー参照をどうするのか不思議に思います。
明らかに、その意図は、 (ポリモーフィック)インターフェースによってアクセスされるMyWorker
NVIで使用することです。これにより、実装がタイプの(値)メンバーを所有することが除外されます。これは、スライスなどが発生するためです。値セマンティクスはポリモーフィズムとうまく混ざりません。 そのクラスはに不明であるため、タイプのデータメンバーを持つこともできません。 したがって、元のオブジェクトとポリモーフィックな性質を維持しながら、ポインターまたは参照を介して使用することを意図していたに違いないと結論付けます。GenericTableAlgorithm
GTAClient
GTAClient
MyWorker
GenericTableAlgorithm
- 一時オブジェクト()へのポインタが
MyWorker()
良いアイデアになることはめったにないので、作者の計画は(const)参照にバインドされた一時オブジェクトの延長された寿命を使用し、そのような参照をオブジェクトpimpl_
ポイントに格納してそこから使用することだったと思います。(注:GTAClientには、これを機能させる可能性のあるクローンメンバー関数もありません。バックグラウンドにRTTI-typeinfoベースのファクトリが潜んでいるとは限りません。)
そして、ここで(ついに!)私の質問は次のようになります。(どのように)寿命が延長されたクラスの参照メンバーに一時を渡すことは合法的に行うことができますか?
§12.2.5の標準(C ++ 0xバージョンですが、C ++でも同じです。チャプター番号はわかりません)では、ライフタイム拡張から次の例外が発生します。
"-コンストラクターの参照メンバーに一時的にバインドされます。ctor-initializer(12.6.2)は、コンストラクターが終了するまで存続します。」
したがって、オブジェクトはクライアントコードa.Process()の呼び出しでは使用できません。参照された一時的なfromMyWorker()
はすでに死んでいるからです!
問題を実証する私自身のクラフトの例を考えてみましょう(GCC4.2でテスト済み):
出力を生成します
const oogie&refの場合、func()のすぐに参照にバインドされた一時的な戻り値は、その参照の存続期間が延長されている(mainの終わりまで)ので、問題ないこと
がわかります。
しかし:1000-oogieオブジェクトは、kangoo-sが構築された直後にすでに破壊されています。コードは機能しますが、ここではアンデッドオブジェクトを扱っています...
もう一度質問をします。
まず、ここで何かが足りないので、コードは正しい/合法ですか?。
次に、-Wallが指定されていても、GCCが警告を表示しないのはなぜですか?それが必要ですか?できますか?
お時間をいただきありがとうございます、
マーティン
c++ - stringstream 一時的な ostream リターンの問題
次のセクションでロガーを作成しています。
するという考えで:
これはすべて意図したとおりに機能しますが、そうすると:
それは動作しません:
通常の正しい文字列ではなく、ジャンク データを含む 'format' になります。
これは、 << 演算子によって返された一時的な ostream が、元の文字列ストリームよりも長生きするためだと思います。
それとも私が間違っていますか?
(string() がこのように機能するのはなぜですか?それは、それ自体への参照を返すためですか?私はそう仮定しています。)
リリースモードでログインするときに追加の割り当てを排除するので、私は本当にこの方法でやりたいと思っています。
この方法でそれを行うための指針やコツは大歓迎です。私の実際のソリューションでは、さまざまなログ関数があり、それらはすべてこれよりも複雑です。したがって、これを何らかの方法で呼び出し元のコードに実装することをお勧めします。(可能であれば #define を変更しないでください)
アイデアを与えるために、私の実際の #defines の 1 つの例を示します。
これは、char*、string()、および ostream() を取る可変引数の printf のようなログ関数と、string()、exception()、および HRESULT を取る非可変引数関数に一致します。
c++ - 非 const 参照が一時オブジェクトにバインドできないのはなぜですか?
getx()
関数が返す一時オブジェクトへの非 const 参照を取得できないのはなぜですか? 明らかに、これは C++ 標準で禁止されていますが、標準への参照ではなく、そのような制限の目的に興味があります。
- オブジェクトへの定数参照はC++ 標準で禁止されていないため、オブジェクトの有効期間が原因ではないことは明らかです。
- 非定数関数の呼び出しが許可されているため、上記のサンプルでは一時オブジェクトが定数でないことは明らかです。たとえば
ref()
、一時オブジェクトを変更できます。 - さらに
ref()
、コンパイラをだましてこの一時オブジェクトへのリンクを取得できるようにすることで、問題を解決できます。
加えて:
彼らは、「一時オブジェクトをconst参照に割り当てると、このオブジェクトの寿命が延びる」と「非const参照については何も言われていない」と言います。私の追加の質問です。次の割り当ては、一時オブジェクトの有効期間を延長しますか?
c++ - 一時オブジェクトを変更して引数として渡すことはできますか?
一時オブジェクトを変更して引数として渡すことはできますか?
一時オブジェクトを const 参照に割り当てると、この一時オブジェクトの寿命が延びることが知られています。コードの 4 行目と 5 行目はどうでしょうか。関数 func_ref で参照 x が常に有効であるというのは本当ですか? 問題は、operator-- が何らかの参照を返し、コンパイラーがこの参照と作成した一時オブジェクトとの関係を認識しないことです。