以下のコードのようにinitializer_listを引数に取る代入演算子を持ったクラスを用意し、そのインスタンスに空のinitializer_listを与えるとメンバ変数に0が代入されているようです。
しかしこの時initializer_listは要素を持っていないのですから、そのイテレータは関係の無い場所を指しているのではないかと思うのですが、何故うまい具合に0が代入されるのでしょうか?
使用言語はC++11、使用コンパイラはVisual C++ Compiler November 2013 CTPです。
空のinitializer_listに関して
Re: 空のinitializer_listに関して
素人的な質問は、素人に聞こう!
↑
危ない危ない。
ちゃんとした人に質問しましょう。
ちなみに私は、ちゃんとしていない素人です。
↑
危ない危ない。
ちゃんとした人に質問しましょう。
ちなみに私は、ちゃんとしていない素人です。
- tk-xleader
- 記事: 158
- 登録日時: 13年前
- 連絡を取る:
Re: 空のinitializer_listに関して
偶然です。空のinitializer_listにbegin()を呼び出した場合の戻り値はunspecified(不定)なので、どんな値であっても、というかどのようなことが起ころうと文句が言えないということになります。
Re: 空のinitializer_listに関して
Wandboxで試した所、確かにデタラメな値になりました。tk-xleader さんが書きました: 偶然です。空のinitializer_listにbegin()を呼び出した場合の戻り値はunspecified(不定)なので、どんな値であっても、というかどのようなことが起ころうと文句が言えないということになります。
たまたまメモリに0が入っていたのか、それともたまたまコンパイラが0に初期化するコードを吐いたのかは、コンパイラが出力するアセンブリ言語のコードを見るとわかるかもしれません。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: 空のinitializer_listに関して
tk-xleaderさん、みけCATさん
やはり偶然の産物だったのですね……
使う段になった時はsize関数で判定するように致します。
V30さん
今回の例のようにアグリゲートなクラスでしたら、宣言の際にはゼロ初期化されるかとは思うのですが、果たしてただの代入でゼロ初期化は起こるんですかね?
改めて調べてみることにします。
皆さん、回答ありがとうございました。
解決チェック入れておきますね。
やはり偶然の産物だったのですね……
使う段になった時はsize関数で判定するように致します。
V30さん
今回の例のようにアグリゲートなクラスでしたら、宣言の際にはゼロ初期化されるかとは思うのですが、果たしてただの代入でゼロ初期化は起こるんですかね?
改めて調べてみることにします。
皆さん、回答ありがとうございました。
解決チェック入れておきますね。