2022年12月23日

C/C++で四苦八苦ってほどでもないがヘンなのに気づいたのである

C/C++で配列外にアクセスしてもエラーにはならないときがある。C++のvectorではどうか。C++はCの機能向上版という一面があろうから修正されていて範囲外アクセスはコンパイル時に指摘されるに違いない・・・・ あまーーーーーい!!
てなことをC++の入門本の例題を動かしていて気づいた次第である。

ワタクシのような疑問を持つ初心者は多々おるであろう。範囲外にアクセスするとどうなるのだ、どーや。
https://teratail.com/questions/214828

範囲外アクセスは「未定義動作」を引き起こします。
これは処理系がどのように振る舞うべきか規格書で定義されていないという意味です。
-------------------------------------------------------
うむうむ。で、vectorの場合には?

FYI: vector要素アクセスを添え字演算 v[i] で行うと Chironian さん指摘通りですが、メンバ関数 v.at(i) を用いると範囲外アクセス時に例外が送出されます。

 
   これな。ワタクシの読んでいる本では v[i]でも範囲外アクセスは例外出る・・・って書いてあったのだがワタクシのDELL OPTIPLEX 7010SFF Win 11(非推奨PC) 22H2のVScode TerminalのMinGW g++では正常終了しただす。つまりv[i]の場合にはエラーでず。だが、v.at(i)の場合には例外が出たのですねえ。ってことはv.at(i)を使うのがいいのかってかね。
でもね、v[10] = 9 ; とかの方が分かりやすくね? 
なんせC++はワタクシにとってはBetter C なのでしてね。えーえー。クラスなんて高級な機能など使わんし・・・使えんし・・・ てへ。

というわけで、まあ本で使用しているコンパイラとワタクシが使用するコンパイラが違うので本の結果とは違うぞなって話かな。

やっぱ漢はC/C++だぜ・・・・・・(テキトー)

posted by toinohni at 06:27| 東京 ☀| Comment(0) | ソフト系雑学 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
コチラをクリックしてください