問題タブ [in-class-initialization]
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++11になりましたか?
クラス自体の内部で通常のメンバーを初期化できるクラス初期化機能では、
これにより、最新のコンパイラgcc-4.6(with -std=c++0x
)でエラーが発生します。この機能はC++11標準に組み込まれていますか、それともgccはまだサポートしていませんか?
c++ - C ++では、クラスを作成するときに0xcdcdcdcdのポインターを取得します-何が起こっているのですか?
- - - - - - - - 編集 - - - - - - - - - - - -
私は比較のために間違った値をつかんでいました、cdcdcdcdはどこかから来ていました。メソッドが到達する前に例外をスローすることはまだありますが、問題は他の場所にあります。元の質問を「投稿解除」する方法があればいいのにと思います。助けてくれてありがとう。
- - - - - - - - 編集 - - - - - - - - - - - -
私はいくつかのサードパーティクラスから継承したクラス(MyClass)を持っています(これは直接showクラスから派生します-これが重要な場合はCBaseFilterから派生します)。私はこのコードを書きます:
メソッド呼び出しを行おうとすると、例外がスローされます。少し調べてみると、valを逆参照すると(val自体は有効のようです... 0x0777fc90のようなものです)、0xcdcdcdcdが含まれていることがわかりました。周りを見回したところ、これはメモリがヒープに割り当てられているが、初期化されていないことを示しているようです。
どういう意味ですか?!newの呼び出しはどのように成功しますか(val!= NULL)、それでもメモリはそれへのポインタを持つのに十分に初期化されていませんか?基本クラスの初期化の一部で問題が発生した可能性はありますか?もしそうなら-私は何を探していますか?
c++ - 初期化リストのtry/catchはどのように機能しますか?
初期化の例外が発生する可能性があると考えています。したがって、try/catchブロックを記述します。
しかし、キャッチは1レベル深いところで例外を再スローします。つまり、次のコードは
出力します:
このtry/catchブロックが通常のtry/catchブロックと同じように動作しないのはなぜですか?
完全なコード例:http://ideone.com/XjY2d
java - Beanのフィールドが初期化される順序
私はこのような豆を持っています:
しかし、SpringがBeanをインスタンス化する間、それはをスローしNullPointerException
ます。したがって、フィールドtwo
がフィールドの前に初期化されone
、NPEが発生するのではないかと思います。Beanでフィールドが初期化される順序を教えてもらえますか?
c++ - クラス内で初期化された `const const std::string` を静的メンバーにできないのはなぜですか
次の作業コードがあります。
テストをaにすることができない正当な理由はありstatic const
ますか? C++ 11より前は、標準によって制約されていたことを理解しています。私は、c++11 がクラス内初期化を導入して、少し使いやすくしたと考えました。私もかなり前から、そのようなセマンティックは整数型に使用できません。
もちろん、次の形式のクラス外初期化で機能しますconst std::string A::test = "42";
非静的にすることができれば、問題は2つのうちの1つにあると思います。クラス外スコープで初期化します (通常const
、オブジェクトのインスタンス化中に s が作成されます)。しかし、クラスの他のメンバーから独立したオブジェクトを作成している場合、これは問題ではないと思います。2 つ目は、静的メンバーに複数の定義があることです。たとえば、複数に含まれている場合.cpp
ファイルがいくつかのオブジェクト ファイルに到達すると、リンカはそれらのオブジェクトを一緒にリンクするときに (たとえば、1 つの実行可能ファイルに)、同じシンボルのコピーが含まれるため、問題が発生します。私の理解では、これはヘッダーのクラス宣言のすぐ下にクラス外を提供し、この共通ヘッダーを複数の場所に含める状況とまったく同じです。私が思い出したように、これはリンカーエラーにつながります。
ただし、これを処理する責任はユーザー/プログラマーに移されました。ライブラリにstatic
クラス外の定義を提供する必要がある場合は、それを別のオブジェクト ファイルにコンパイルしてから、他のすべてのオブジェクトをこのファイルにリンクする必要があります。シンボル。
クラス定義内で初期化されている場合でも、静的メンバーを個別に定義する必要がありますか?の回答を読みました。クラスで非 const 静的メンバーまたは静的配列を初期化できないのはなぜですか? .
私はまだ知りたいです:
- それは単なる標準的なものですか、それとももっと深い理由がありますか?
constexpr
これは、およびユーザー定義のリテラル メカニズムで回避できますか。clang と g++ はどちらも、変数に非リテラル型を含めることはできないと言っています。多分私はそれを作ることができます。(たぶん、何らかの理由でそれも悪い考えです)- リンカーがシンボルのコピーを 1 つだけ含めることは、本当に大きな問題なのでしょうか? それは
static const
すべて、バイナリの正確な不変のコピーである必要があるためです。
私が何かを見逃したり誤解したりする場合は、コメントしてください。
c++ - C++11 の「クラス初期化」機能が共用体で機能しない
最小限のコード例:
a を宣言するとB obj;
、 のobj.u.i
代わりにガベージ値が割り当てられます100
。ここでデモを参照してください。(ガベージ値は最適化フラグなどによって異なります)。
ユニオンで動作するはずの「クラス内初期化」機能です。
- はいの場合、正しい構文は何ですか? それとも、これは g++ のバグですか?
- そうでない場合はどうなり
int i = 100;
ますか?
c++ - メンバー変数を中かっこで初期化した後、別の中かっこのセットが必要なのはなぜですか?
ブレースの初期化 (ありがたいことに、Visual Studio 2013 が実際にサポートしています) を使用しようとしていましたが、クラスでそれを行うと、何らかの理由で 2 セットの中かっこが必要になります。例えば:
なぜ私が言う必要があるのですnumber { 5 }{}
か?それは私には視覚的に意味がありません。