【C++問題集 継続更新】

0. ヘッダーファイルの組み込み順序

標準のヘッダー ファイルのインクルード順序を使用すると、可読性が向上し、隠れた依存関係が回避されます。
「C++ プログラミングのアイデア」の推奨順序: (xxx.cpp の場合) 最も特殊なものから最も一般的なものまで。

xxx.h
本项目内 .h 文件
其他库的 .h 文件
C++ 系统文件
C 系统文件

「Google C++ スタイル ガイド」の推奨順序:(xxx.cpp の場合)

xxx.h
C 系统文件
C++ 系统文件
其他库的 .h 文件
本项目内 .h 文件

隠れた依存関係を避けるために xxx.h を先頭に置くことは同じであり、各ヘッダー ファイルを独立してコンパイルできることを望んでいます。

1. メモリアクセス違反

クラスメンバ数が初期化されていない場合、ヒープ破壊やメモリアクセス違反などのエラーが発生します。主な理由は、後でこのメンバーを使用する際に、システムによってランダムに割り当てられた値 (比較的大きな値) が取得されること、およびこのパラメーターに従ってメモリーにインデックスが付けられるときに、そうでないメモリーにアクセスすることが原因で発生することです。それ自体に属します。
教訓:すべてのクラス メンバーは使用前に初期化する必要がある
ここに画像の説明を挿入
ここに画像の説明を挿入

2. グローバル変数

宣言の先頭からファイルの末尾まで表示され、グローバル/静的領域に格納されます。(ローカル変数は一般に関数内のローカル変数のみです)
(1) 関数外で単一のファイル
を定義可能
(2) 複数のファイル:無関係、関連(ヘッダファイルを参照)
a. 関連(グローバル変数定義ファイルを参照)
グローバル変数の宣言:

extern int g_a;

グローバル変数の定義:

g_a = 0;

注:同じ変数または関数を複数宣言できますが、定義は 1 つだけです。宣言と定義を一緒にすると、ヘッダー ファイルがインクルードされると繰り返し定義エラー extern int g_a=0 が発生するので、絶対に
避けてください。
b. 無関係な
宣言と定義が同じファイル内にあります (test1.h の extern int g_a=0 など)
。test1.h は test2 には含まれておらず、このグローバル変数を使用するには宣言 extern int g_a が必要です。

3. float型、double型の注意事項

加算を行う場合、有効桁数に限りがあるため、加算は終了します。
float 型の場合、値が 1*10^7 より大きい場合は、加算の使用を避けてください。
ここに画像の説明を挿入
ここに画像の説明を挿入

double 型の場合、値が 1*10^16 より大きい場合、加算の使用は避けてください。
ここに画像の説明を挿入
ここに画像の説明を挿入

-------------------------------------------------- ------------------------2023.02.23更新--------------------- -------------------------------------------------- --

4. 浮動小数点から整数への変換の切り捨て問題

Float 型を int 型に変換すると、400 が格納され、float 型は 399.99998、切り捨て変換後は 399 になるなど、切り捨てが発生します。したがって、浮動小数点型を整数型に変換する場合は、float(round(a)) で四捨五入してから変換するのが最適です。

5. NULL と nullptr の違い

C++ では、NULL と nullptr は、C 言語では NULL はヌル ポインターを意味しますが、C++ では、NULL は 0 またはヌル ポインターを意味し、nullptr は C++11 以降であり、ヌル ポインターを意味します。したがって、nullptr を均一に使用するには、C++ で null ポインターを使用することをお勧めします。

6. 文字列と文字の間の変換

文字列を文字に変換

char ch[20];
string s="123456";
strcpy(ch,s.c_str());

文字列を文字に変換*

const char* p=a.data();
const char* p=a.c_str();
char* p=const_cast<char*>(a_str());
char转string直接赋值即可

7.文字列と整数間の変換

文字列を int に、最初に char に、次に int に

string str1 = s_Value.toStdString();
int value = atoi(str1.c_str());
float value = atof(str1.c_str()); //转float

int から string (C++11 標準ではグローバル関数 std::to_string が追加されます)

string to_string (int val);
string to_string (long val);
string to_string (long long val);
string to_string (unsigned val);
string to_string (unsigned long val);
string to_string (unsigned long long val);
string to_string (float val);
string to_string (double val);
string to_string (long double val);
std::string pi = "pi is " + std::to_string(3.1415926);

おすすめ

転載: blog.csdn.net/qq_44924694/article/details/127939724