C++についての情報。
0c52de9dbe
とくに
通報 ...
ハイライト表示はC++は非対応か・・・対応してたわ。cppでいけた。
基本情報:C++はC言語の拡張版として作られた。
C言語にオブジェクト指向の機能を追加したもの。
しかし、実際にはC言語のように手続き型の言語としても使用可能である。
C++にはいくつかのバージョンが存在しおもにC++03、C++11、C++14、C++17、C++20などがある。
新しいバージョンになるほど新しい機能や文法が取り入れられたりする。
定数
C++11以前
C++11以降
constは単なる定数であり、変数と同じくメモリ上に確保される。
constexprはconstとは違い、コンパイル時に値が決定される。
コンパイル時に実行される関数
列挙型
C++11以降では
と書ける。
使い方
enum
enum class
enumの型はコンパイラの処理系に依存、enum classは規定ではint型と定められている。
C++11以降ではenumでもenum classでも既定の型を指定可能。
enum
enum class
std::stringについて
std::stringはC++の標準ライブラリの一つである。
文字列の処理をより簡便に行えるようにしたもの。
C言語ではこれがない為に文字列の処理は非常に面倒な上、メモリの確保を間違えれば直ぐにバッファオーバランが発生する危険性があった。
C言語のコード
C++のコード(std:stringを使用)
const char*の値が欲しい時は
で可能である為、引数がconst char*である関数に渡すことができる。
ラムダ式
引数を取ることも可能
戻り値を明示
キャプチャ
std::functionを使ってもラムダ式を代入可能。
std::vectorは可変長配列である。
通常の配列とは異なり、自由に配列の長さを変えることができる。
また、イテレータを扱えたりと色々便利な関数が用意されている。
std::vectorの定義
要素を追加・アクセス
要素アクセスの[]とatの違いは範囲チェックを行うかどうか。
[]は範囲チェックを行わないので、範囲外を見に行った時にバッファオーバランが発生するときがある。
atは範囲チェックを行うので範囲外を見に行くとstd::out_of_range例外が投げられる。
初期化方法
int型の値を1バイトずつ切り分ける。
表示される順番は環境依存。
リトルエンディアンとビックエンディアンがある。
リトルエンディアン(LE)は下位バイトから順にメモリに書き込む。
ビックエンディアン(BE)は上位バイトから順にメモリに書き込む。
0xfeac9845
LE→45 98 ac fe
BE→fe ac 98 45