C ++ Primer Plusエッセイ(第3章データ処理)

●C ++変数の命名規則。

    コンピュータに情報を保存するために、プログラムは3つの基本的な属性を記録する必要があります:
      ●情報が保存される場所
      ● 保存する値● 保存する情報の
      種類。

1. C ++命名規則

●名前には、英字、数字、アンダースコア(_)のみを使用できます。
●名前の最初の文字を数字にすることはできません。
●大文字と小文字を区別します。
●Ct +キーワードは名前として使用できません。
●2つのアンダースコアまたはアンダースコアと大文字で始まる名前は実装用に予約されています:(コンパイラとそれによって使用されるリソース)_Use。アンダースコアで始まる名前は実装用に予約されており、グローバル識別子として使用されます。
●C ++では名前の長さに制限はありません。名前のすべての文字は意味がありますが、プラットフォームによっては長さに制限があります。

●C ++組み込み整数型unsigned long、long、unsigned int、int、unsigned short、short、char、unsigned char、signed charおよびbool。

整数short、int、long、long long

    各タイプの幅がすべてのシステムで同じであれば、使用すると非常に便利です。たとえば、shortが常に16ビットの場合、intは常に32ビットになります。しかし、人生はそれほど単純ではなく、すべてのコンピュータ設計要件を満たすための1つの選択肢はありません。C ++は、最小の長さ(C言語から借用)を保証する柔軟な標準を提供します。
     ●shortは少なくとも16ビットです。
     ●intは少なくともshortと同じ長さです。
     ●longは少なくとも32ビットであり、少なくともintは同じ長さです。
     ●long longは少なくとも64ビットで、少なくとも同じ長さです。

初期化

    初期化では、割り当てと宣言を組み合わせます。

int n = 10;

    変数の初期値が何であるかがわかっている場合は、初期化する必要があります。変数の宣言と割り当てを分離すると、一瞬で未解決の問題が発生する可能性があります。

short year ;
year = 1024;

C + 11初期化メソッド

    配列と構造体に使用される別の初期化メソッドがありますが、C ++ 98の単一値変数にも使用できます。

int number = {24};

    ブレース初期化子が単一値変数に使用されるケースは多くありませんが、C ++ 11標準ではこの状況がさらに改善されています。まず、このようにして、等号(=)を使用するか、使用できません。

int emus {7};
int rheas = {12};

    第二に、中括弧は何も含むことができません。この場合、変数はゼロに初期化されます。

制限を超えました

    プログラムは、short変数(sam)とunsigned short変数(sue)をシステムの32767である最大のshort値に設定し、これらの変数の値を1増やします。新しい値はまだ符号なし整数の最大値よりもはるかに小さいため、これはsueには問題ありませんが、samの値は32767から-32768に変更されました!同様に、samの場合は0に設定して1を減算します。 、問題ありませんが、符号なし変数sueは0に設定して減算すると65535になります。これらの整数変数はオドメーターのように動作することがわかります。制限を超えると、その値は範囲の反対側の値になります(図3.1を参照)。C ++は、符号なしの型のこの動作を保証します。ただし、C ++は、シンボリック整数型がエラーなしで制限(。オーバーフローとアンダーフロー)を超えることを保証しません。これは、現在の実装で最も一般的な動作です。

メンバー関数cout.put()

    cout.put()とは正確には何ですか?名前にピリオドがあるのはなぜですか?関数cout.put()は、重要なC ++ OOP概念メンバー関数の例です。クラスは、データを表現および制御する方法を定義します。メンバー関数はグループ化され、クラスデータを操作するためのメソッドを記述します。たとえば、クラスostreamには、文字を出力するためのpu()メンバー関数があります。メンバー関数は、クラスの特定のオブジェクト(ここではcoutオブジェクトなど)を介してのみ使用できます。オブジェクト(coutなど)でメンバー関数を使用するには、オブジェクト名と関数名(put())をピリオドで接続する必要があります。この期間はメンバー演算子と呼ばれます。cout.put()は、関数put()がクラスオブジェクトcoutを通じて使用されることを意味します。

charリテラル

C ++では、文字定数を書き込む方法はたくさんあります。通常の文字(文字、句読点、数字など)の場合、最も簡単な方法は、文字を単一引用符で囲むことです。この表記は、文字の数値エンコードを表します。たとえば、ASCIIシステムでの対応する状況は次のとおりです。
      ● 'A'は文字AのASCIIコードである65です。
      ● 'a'は文字aのASCIIコードである97です。
      ● '5'はASCII番号5である53 です。コード;
      ● ''はスペース文字のASCIIコードである32です。
      ● '!'は感嘆符のASCIIコードである33です。
ここに画像の説明を挿入

署名された文字と署名されていない文字

    intとは異なり、charはデフォルトでは署名も署名もされていません。シンボルがあるかどうかはC ++実装によって決定されるため、コンパイラ開発者はこの型とハードウェアプロパティとのマッチングを最大化できます。charがあなたにとって非常に重要な特定の動作をしている場合、型をsigned charまたはunsigned charに明示的に設定できます
。charが数値型として使用されている場合、unsigned charとsigned charの違いは非常に大きくなります。重要です。unsigned char型の表現範囲は通常0〜255ですが、signed char型の表現範囲は-128〜127です。たとえば、char変数を使用して200までの値を格納するとします。これは、一部のシステムでは可能かもしれませんが、他のシステムでは不可能かもしれません。ただし、unsigned charを使用すると、どのシステムでもこの目的を達成できます。一方、標準のASCIr文字を格納するためにchar変数を使用する場合、charがシンボルであるかどうかは関係ありません。この場合、charを使用できます。

ブール型

    論理法則の数学的表現を開発したジョージ・ブール。計算では、ブール変数の値はtrueまたはfalseになりますが、以前は、CのようなC ++にはブール型がありませんでした。第5章と第6章で説明するように、C ++はゼロ以外の値をtrueとして解釈し、ゼロをfalse7として解釈しますが、ブール型を使用してtrueとfalseを表すことができます。真と偽は言った。つまり、次のようなステートメントを記述できます。

bool is_ ready = true;

●さまざまな整数システム制限を表すClimitsファイル。

オペレーターのsizeofとヘッダーの制限

    sizeof演算子は、8ビットバイトを使用するシステムでは、intの長さが4バイトであることを示します。タイプ名または変数名にsizeof演算子を使用できます。タイプ名(intなど)でsizeof演算子を使用する場合は、名前を括弧で囲みます。ただし、変数名(n_ shortなど)でこの演算子を使用する場合、括弧はオプションです。
ここに画像の説明を挿入
ここに画像の説明を挿入

●さまざまな浮動小数点タイプのシステム制限を表すcfloatファイル。

少なくともダブルと同じくらい。3種類の有効数字はいくつでもかまいません。ただし、一般的に、floatは32ビット、doubleは64ビット、少なくともdoubleと同じです。3種類の有効数字はいくつでもかまいません。ただし、一般的に、floatは32ビット、doubleは64ビット、long doubleは80、96、または128ビットです。また、3種類のインデックス範囲は少なくとも-37〜37です。システムの制限は、ヘッダーファイルcfloatまたはfloat.hにあります。(cfloatは、C言語のfloatファイルのE ++バージョンです。)以下は、float.h = Borland E ++ Builderのファイル内のコメントです。
ここに画像の説明を挿入

●さまざまな整数数値リテラル(定数)。

整数リテラル

割り当て時に10進数または16進数を割り当てることができます

#include <iostream>
int main()
{
	using namespace std;
	int chest = 42; // decimal integer literal
	int waist = 0x42;// hexadecimal integer literal
	int inseam = 042;// octal integer literal
	cout << "Monsieur cuts a striking figure!\n" ;
	cout << "chest =”<< chest <<”(42 in decimal) \n";
	cout << "waist =”<< waist <<”(0x42 in hex) \n";
	cout << "inseam =”<< inseam <<”(042 in octal) \n" ;
	return 0;
}

●記号定数を作成するには、const修飾子を使用します。

    定数が初期化された後、その値は固定され、コンパイラーは定数の値を変更できなくなります。これを行うと、g ++はプログラムが値を読み取り専用変数に割り当てようとしていることを示します。"
定数を宣言するときに値を指定しないと、定数の値は未定義になり、変更できません。
以前にC言語を使用したことがある場合、前述の#defineステートメントでそのような作業を完了するのに十分だと思うかもしれません。 constは#defienより優れています。1つ目は、タイプを明示的に指定できます。2つ目は、C ++スコープルールを使用して、定義を特定の関数またはファイルに制限できます(スコープルールは、さまざまなモジュールで名前がどの程度よく知られているかを記述します第3章で説明します。)3番目に、第4章で紹介した配列や構造体など、より複雑な複合型にはconstを使用できます。

●C ++組み込みの浮動小数点型:float、double、およびlong double。

1.浮動小数点タイプ

    実際、CおよびC ++は、floatには少なくとも32ビット、doubleには少なくとも48ビット、float以上である必要があり、long doubleは少なくともdoubleと同じです。3種類の有効数字はいくつでもかまいません。ただし、一般的に、floatは32ビット、doubleは64ビット、long doubleは80、96、または128ビットです。また、3種類のインデックス範囲は少なくとも37〜37です。
第17章で導入されるostreamメソッドsetf()をプレビューしました。この呼び出しにより、出力は固定小数点表記を使用して精度をよりよく理解し、プログラムがより大きな値をE表記に切り替えるのを防ぎ、プログラムに小数点以下6桁を表示させます。

2.浮動小数点数の長所と短所

    整数と比較して、浮動小数点数には2つの大きな利点があります。まず、整数間の値を表すことができます。第2に、スケーリング係数があるため、より大きな範囲を表すことができます。一方、浮動小数点演算は通常、整数演算よりも遅く、精度が低下します。次のプログラムリストは、最後のポイントを示しています。

#include < iostream>
int main()
{
	using namespace std;
	float a = 2.34E+22f;
	float b = a + 1.0f;
	cout <<"a = "<< a<< endl;
	cout << "b - a = " << b - a << endl;
	return 0;
	
}

●さまざまな浮動小数点タイプのシステム制限を表すcfloatファイル。

ここに画像の説明を挿入

●さまざまな浮動小数点型の数値リテラル。

1.浮動小数点数を書き込む

    C ++には、浮動小数点数を書き込む方法が2つあります。1つ目は、一般的に使用される標準の10進表記を使用することです。
浮動小数点値を表す2番目の方法はE表記と呼ばれ、次のようになります。3.45E6は、3.45と1000000を乗算した結果を指します。E6は、10の6乗、つまり、6の後の1を指します。 0秒。したがって、3.45E6は3450000を意味します。6は指数と呼ばれ、3.45は仮数と呼ばれます。

●C ++算術演算子。

1. 5人のオペレーター

5つの基本的なC ++算術演算子を次に示します。
      ●+演算子は、オペランドに対して加算演算を実行します。たとえば、4 + 20は24と同じです。
      ●-演算子は、最初の数値から2番目の数値を減算します。たとえば、12-3は9と同じです。
      ●*演算子は、オペランドを乗算します。たとえば、28 * 4は112に相当します。
      ●/演算子は、最初の数値を2番目の数値で割ります。たとえば、1000/5は200と同じです。両方のオペランドが整数の場合、結果は商の整数部分になります。たとえば、17/3は5に等しく、小数部分は破棄されます。
      ●%演算子はモジュロです。つまり、最初の数値を2番目の数値で除算した後、剰余を生成します。たとえば、19は3の6倍で1より大きいため、19%6は1です。両方のオペランドは整数でなければならず、この演算子を浮動小数点数に使用すると、コンパイルエラーが発生します。それらの1つが負の場合、結果の符号は次のルールを満たします:(a / b)* b + a%b = a。

2.商のタイプ

    除算演算子(/)の動作は、オペランドのタイプによって異なります。両方のオペランドが整数の場合、C ++は整数除算を実行します。つまり、結果の小数部分は破棄され、最終結果は整数になります。オペランドの1つ(または2つ)が浮動小数点値の場合、小数部分は保持され、結果は浮動小数点数になります。

3.タイプ変換

    C ++の豊富なタイプにより、要件に応じて異なるタイプを選択できるため、コンピューターの操作がより複雑になります。たとえば、2つの短い値の追加に関連するハードウェアコンパイル命令は、2つの長い値の追加とは異なる場合があります。11の整数型と3つの浮動小数点型があるため、コンピューターは、特に異なる型で操作する場合に、多数の異なる状況に対処する必要があります。この潜在的な混乱を処理するために、C ++が自動的に実行され、マルチタイプの変換:
       ●算術変数の別のタイプに割り当てられ算術タイプの値は、C + +は、変換された値となる場合、
       ●は異なる式を含みますタイプがC ++の
       場合、値が変換されます。●パラメータを関数に渡す場合、C ++が値を変換します。

●自動タイプ変換。

1.初期化と代入による変換

    値の範囲が広いタイプに値を割り当てても、通常は問題は発生しません。たとえば、short値をlong変数に割り当てても、この値は変更されず、より多くのバイトが必要になります。ただし、float変数に長い値(2111222333など)を割り当てると、精度が低下します。floatは6桁の有効数字しかないため、この値は2.1H122E9に丸められます。したがって、一部の変換は安全であり、いくつかは問題を引き起こします。表3.3に、起こり得る変換の問題を示します。
ここに画像の説明を挿入
    bool変数に0を割り当てると、falseに変換され、ゼロ以外の値はtrueに変換されます。
    整数に浮動小数点値を割り当てると、2つの問題が発生します。まず、浮動小数点値を整数に変換すると、数値が切り捨てられます(小数部を除く)。次に、float値がint変数に対して大きすぎる可能性があります。この場合、C ++は結果がどうあるべきかを定義しません;これは、実装によって反応が異なる可能性があることを意味します。

2.式変換

    2つの異なる算術型が同じ式に含まれている場合はどうなりますか?この場合、C ++は2つの自動変換を実行します。タイプは、他のタイプと同時に式に現れるときに変換されます。
    つまり、コンパイラは、チェックテーブルを介して、算術式で実行される変換を決定します。C ++ 11はこのチェックリストをわずかに変更しました。以下はC ++ 11バージョンのチェックリストです。コンパイラはこのリストを順番に調べます。
    (1)一方のオペランドがlongdouble型の場合、もう一方のオペランドをlongdoubleに変換します。
    (2)それ以外の場合で、一方のオペランドがdouble型の場合、もう一方のオペランドをdoubleに変換します。
    (3)それ以外の場合、一方のオペランドがfloat型である場合、もう一方のオペランドをfloatに変換します。
    (4)それ以外の場合、オペランドはすべて整数であるため、整数の昇格が実行されます。
    (5)この場合、両方のオペランドが符号付きまたは符号なしで、一方のオペランドのレベルがもう一方のオペランドよりも低い場合は、上位の型に変換されます。
    (6)一方のオペランドが符号付きで、もう一方が符号なしで、符号なしオペランドのレベルが符号付きオペランドよりも1つ高い場合、符号付きオペランドを符号なしオペランドに変換しますタイプ。
    (7)それ以外の場合で、符号付き型が符号なし型のすべての可能な値を表すことができる場合、符号なしオペランドは、符号付きオペランドが属する型に変換されます。
    (8)それ以外の場合は、両方のオペランドを符号付き型の符号なしバージョンに変換します。

3、C ++ 11 auto

    C ++ 11には、コンパイラーが初期値のタイプに基づいて変数のタイプを推測できるツールが追加されました。このため、自動の意味を再定義しています。autoはC言語のキーワードですが、ほとんど使用されていません。以前の意味については、第9章を参照してください。初期化宣言で、変数のタイプを指定せずにキーワードautoを使用すると、コンパイラーは変数のタイプを初期値と同じに設定します。

auto n = 100; // n is int
auto x = 1.5; // x is double
auto y = 1.3e12L // y is long double

●必須の型変換。

1.
    C ++ 型による強制変換では、必須の型変換メカニズムを通じて明示的な型変換も可能です。(C ++は、型の規則が必要であることを認識しています。これらの規則をオーバーライドする必要がある場合もあります。)必須の型変換には2つの形式があります。たとえば、変数thomrに格納されているint値をlong型に変換します。

int  thomr;
long (thomr);
//或者
(long) thomr;
元の記事を64件公開 賞賛された406件 20,000回以上

おすすめ

転載: blog.csdn.net/famur/article/details/105437141