C++Primer(英語第5版)日記を読む-20200415
4255 ワード
前言
Markdownエディタに交換し始めました.Typoraユーザーは、フォーマットを編集する場合もあるし、Markdownエディタを使うほうが楽だと感じています.前編に続く.このノートシリーズの主な位置づけは、C++primerを読んだ後、自分に思い出を与える過程であり、完璧なチュートリアル(時間の無駄)を書くわけではありません.しかし、私はできるだけくだらないことを少なくして、干物が多くて、みんなと自分で調べるのに便利です.同時に、日記の目標は技術性と意味学が共存することであり、多くの私たちがよく知っている過程を規範化することである.例えば、初期化とは何か、Objectとは何か.Bottom upはC++の認識を体系的に構築する.時々書く前に前の日記を見て、たくさんの知識を思い出すのに役立ちます.
Variables
定義形式:A simple variable definition consists of a type specifier,followed by a list of one or more variable names separated commas,and ends with a semicolon.
C++の中のObject:約束の俗称です.広く言えば、メモリ容量であり、データを格納し、タイプを持っている.変数(Variable)の多くは、すでに命名されたオブジェクト(Object)を表すために使用されます.
Initializers
Objectが作成されると、初期化されます.Initialization&assginment:initializationとは、変数が作成され、付与されるプロセスを指します.assignmentとは、変数の現在の値を新しい値に置き換える場合を指します.
コードサンプル:
Default Initialization
上記の明示的な初期化に加えて、デフォルトの初期化(default initialized)もあります.初期化時に初期値を手動で指定しない暗黙的(implictly)である.
Default initializationは、関数の外で変数を0に初期化します.しかし、関数内ではundefinedで、文字化けしが発生する可能性があります.
私が2019年に上海科学技術大学CS 101データ構造課で就職助教が出題したとき、ある同級生が「私のプログラムはなぜOJで前回できたのか、次はなくなったが、プログラムは一度も変わっていない」と苦情を寄せた.その後checkが完了すると,同級生が書くのが規範的ではなく,関数が変数を定義する際に0に初期化されていないことが分かった.この点は注意に値する.潜在的なbuff源だ.
余談ですが、良い初期化が重要です.私のアルゴリズムは長く、以前はPascal選手だったが、Cppの基礎は弱い.最近Leetcodeをして、私の初期化がうるさいことに気づいて、公式より簡潔です.例をあげる.
Separatate compilation
独立コンパイル(separate compilation)は、ソースコードをファイルシステムの異なるファイルに分割し、独立してコンパイルできることを意味します.
独立したコンパイルを完了するには、declarationとdefinitionの違いを区別します.declarationは変数の名前を宣言し、その機能ではなく、definitionは変数に対応する機能を宣言します.これはC++ベースの筒たちによく理解されています:ヘッドファイル.hと対応する実現された.cファイル.
しかし、多くの場合、デフォルトの初期化の問題があります.変数の名前を付けると、実際に実行すると、スペースが割り当てられます.デフォルトの初期化(default initialize)を呼び出したくない場合は、次のようにします.
Identifiers
識別子(Identifiers)は、一般的に変数の名前であり、変数を識別するために使用されます.些細なネーミング仕様とキーワードの問題を省略します.
Scope of a name
Scopeは、中国語では役割ドメインと呼ぶべきで、変数名たち(Names)のライフサイクルを決定し、カッコで定義します(curly brace).役割ドメインに定義された変数は、役割ドメインを過ぎると解放され、外部にアクセスできません.
一番外側では、カッコに含まれていないnamesはグローバルスコープ(global scope)で定義されています.同時に役割ドメインは子供をセットして使用することができます(nested).inner scopeとouter scopeという言い方があります.
Markdownエディタに交換し始めました.Typoraユーザーは、フォーマットを編集する場合もあるし、Markdownエディタを使うほうが楽だと感じています.前編に続く.このノートシリーズの主な位置づけは、C++primerを読んだ後、自分に思い出を与える過程であり、完璧なチュートリアル(時間の無駄)を書くわけではありません.しかし、私はできるだけくだらないことを少なくして、干物が多くて、みんなと自分で調べるのに便利です.同時に、日記の目標は技術性と意味学が共存することであり、多くの私たちがよく知っている過程を規範化することである.例えば、初期化とは何か、Objectとは何か.Bottom upはC++の認識を体系的に構築する.時々書く前に前の日記を見て、たくさんの知識を思い出すのに役立ちます.
Variables
定義形式:A simple variable definition consists of a type specifier,followed by a list of one or more variable names separated commas,and ends with a semicolon.
C++の中のObject:約束の俗称です.広く言えば、メモリ容量であり、データを格納し、タイプを持っている.変数(Variable)の多くは、すでに命名されたオブジェクト(Object)を表すために使用されます.
Initializers
Objectが作成されると、初期化されます.Initialization&assginment:initializationとは、変数が作成され、付与されるプロセスを指します.assignmentとは、変数の現在の値を新しい値に置き換える場合を指します.
コードサンプル:
// for variable intialization
double price = 109.99, discount = price * 0.16;
double salePrice = applyDiscount(price, discout);
// for int initialization (distinct ways)
int units_sold = 0;
int units_sold = {0};
int units_sold{0};
int units_sold(0);
Default Initialization
上記の明示的な初期化に加えて、デフォルトの初期化(default initialized)もあります.初期化時に初期値を手動で指定しない暗黙的(implictly)である.
std:: string empty; // empty implictly initialized to the empty string
Default initializationは、関数の外で変数を0に初期化します.しかし、関数内ではundefinedで、文字化けしが発生する可能性があります.
私が2019年に上海科学技術大学CS 101データ構造課で就職助教が出題したとき、ある同級生が「私のプログラムはなぜOJで前回できたのか、次はなくなったが、プログラムは一度も変わっていない」と苦情を寄せた.その後checkが完了すると,同級生が書くのが規範的ではなく,関数が変数を定義する際に0に初期化されていないことが分かった.この点は注意に値する.潜在的なbuff源だ.
余談ですが、良い初期化が重要です.私のアルゴリズムは長く、以前はPascal選手だったが、Cppの基礎は弱い.最近Leetcodeをして、私の初期化がうるさいことに気づいて、公式より簡潔です.例をあげる.
Separatate compilation
独立コンパイル(separate compilation)は、ソースコードをファイルシステムの異なるファイルに分割し、独立してコンパイルできることを意味します.
独立したコンパイルを完了するには、declarationとdefinitionの違いを区別します.declarationは変数の名前を宣言し、その機能ではなく、definitionは変数に対応する機能を宣言します.これはC++ベースの筒たちによく理解されています:ヘッドファイル.hと対応する実現された.cファイル.
しかし、多くの場合、デフォルトの初期化の問題があります.変数の名前を付けると、実際に実行すると、スペースが割り当てられます.デフォルトの初期化(default initialize)を呼び出したくない場合は、次のようにします.
extern int i; // declare but not define
int j;
Identifiers
識別子(Identifiers)は、一般的に変数の名前であり、変数を識別するために使用されます.些細なネーミング仕様とキーワードの問題を省略します.
Scope of a name
Scopeは、中国語では役割ドメインと呼ぶべきで、変数名たち(Names)のライフサイクルを決定し、カッコで定義します(curly brace).役割ドメインに定義された変数は、役割ドメインを過ぎると解放され、外部にアクセスできません.
一番外側では、カッコに含まれていないnamesはグローバルスコープ(global scope)で定義されています.同時に役割ドメインは子供をセットして使用することができます(nested).inner scopeとouter scopeという言い方があります.