C++Primerノート+練習問題解答(二)


今日は第2篇のノートで、主に比較的に面白い知識点を記録して、面と向かって両立することができません.
間違いがあったら訂正してください.ありがとうございます.
1.引用:
いかなるコンピュータ言語にも共通の文法特徴のセットがあり、不通言語の主な違いは文法特徴の実現の詳細にある.
2.基本特徴:
一般的には、組み込みデータ型を指します.ほとんどのC++言語は2つの方法で言語を拡張しています.1はカスタムデータ型です.2はよく使われるパッケージをライブラリにして使用者に提供します.
3.古い言葉:
C++オブジェクトタイプによって実行可能な操作が決まります.式が適切かどうかは、参加するデータ型によって異なります.C++などの静的タイプ言語は、pythonなどの言語が実行中にチェックされるコンパイラでタイプ検出されます.コンパイルと実行時期に関する概念はその字面の意味で理解され,ほぼ正しい.
4.一例:
i=i+j;//            i j     。i         
      //              。

5.基本内蔵タイプ:
2種類に分けられ、1は算術タイプ(arithmetic type)、2は空タイプ(void type)
算術タイプ:文字タイプ、ブールタイプ、整形、浮動小数点タイプ.
voidタイプ:特定の値に対応していません.一般的には、関数の戻り値です.
6.C++文字の種類:
拡張文字タイプ、基本文字タイプ.
7.バイト:
コンピュータアドレスの最小メモリは速い.通常は8ビットで1バイトです.ビット:bit;バイト:byte.
8.保管する基本単位:
ワード(word)は一般的に4バイトまたは8バイトで構成される.スループットに似ているという意味です.メモリ内の各アドレスは、1つのアドレスに関連付けられています.アドレスで対応する自分にアクセスできます.アドレスに明確な意味を与えるためには,格納されたコンテンツのデータ型を知る必要がある.データ型は、データが占有するバイト数と、これらの独自の内容をどのように説明するかを決定します.深さ探索C++オブジェクトモデルでも同様の問題に言及した.
9.C++タイプの概念に重点を置く.
10.記号:
符号なしおよび符号付きタイプ.
ブール型と拡張文字型を除いて、他の整形は符号型と無符号型に分けることができる.
0、正数、負数を表す記号があります.符号なしでは正数のみを表す.
11.対応するタイプの前にunsignedまたはsignedを加えると、対応するシンボルタイプが得られる.
12.文字型が特殊です.
char,signed char,unsigned charの3種類に分けられるが,対外表現は符号型と無符号型の2種類しかない.すなわちcharとsigned charは異なり,具体的な挙動はコンパイラによって決定される.
13.符号なしタイプのすべてのビットは、数値を格納するために使用される.符号付きタイプの最上位は正負を表す.
例えば、unsigned charタイプの表現範囲:理論的には対称範囲は-127~127である.実際の現代コンピュータは通常-128~127である.
14.タイプ変換:
1つのタイプから別の関連タイプに変換します.主に関連しています.
    unsigned char c = -1; -1文字のデフォルト値はintなので変換されます.この場所はバイナリ符号化の知識、すなわちコンピュータがどのように負の数を格納するかに関する.
最後の出力cの値は255である.255がどのように得られたかについては、−1変換後の値を表示の最大範囲で割った余剰である.
例を挙げます.
    :-1      int  。  -1          ?     。
  :    1    。  -1   :1000 0001 ;        。
       ,      ,    。 :1111 1110 ;    。
    :   。   +1;     : 1111 1111 ;
     10     :255 .  255%256=255,    c  255. 

変換できない場合、または範囲を超えると未定義の動作になるか、切断されて異常値になります.
unsigned char c=256.//    。

記号付きと記号なしのタイプを混用しないでください.0で始まる数字は8進数で、0 xで始まると16進数を表します.
15.浮動小数点型のデフォルトのフォント値はdoubleです.
整形の文字値は一般的に最小収容タイプ(shortを含まない)つまりintが収容できる数字であり、コンパイラはintをデフォルトにします.intが置けないと、自動的に適切なタイプにアップグレードされます.
16.文字および文字列のフォント値:
文字列の文字面値は、実際には文字の文字面値からなるデータである.コンパイラは最後のビットに空の文字('0')を追加して終了します.
したがって、文字列の実際の長さはコンテンツよりも多い.
文字列の文字面値の書式:特殊な1つで、2つの隣接する文字列のスペース、インデント、改行文字だけで構成されている場合、別々に書くことができます.
 cout<
      <

2種類の直接使用できない文字:1は、チェックアウト、改行などの印刷できない文字です.2は特殊な意味の文字で、例えば反斜線、疑問符などです.
では、このような文字を使用するには、反斜線を付けます.例えばよくある「」は改行を表す.
これらは、エスケープシーケンスと呼ぶことができる.
17.汎化エスケープシーケンス:
例えば、このようにアルファベットA:x 41を印刷することができます.使用は推奨されません.次にxは16進数を表す.
18.接頭辞接尾辞を追加することによって、字面値タイプを指定することができる.
 :double db1=2L;

接頭辞や接尾辞もたくさんありますが、一つ一つ紹介しません.
19.組み込みタイプがリスト初期化を採用している場合、遮断するリスクはありません.そうしないと、エラーが発生します.
20.宣言と定義の違い:
int i; //  。
extern int i ;//  。
extren int i=0;//  。

初期化動作が存在する宣言も定義されます.
21.なぜ分離コンパイルがサポートされているのか、定義と宣言を厳格に区別するには、複数回の宣言は問題ありませんが、一度に定義するしかありません.
22.複合型の理解:
他のタイプに基づいて定義されたタイプ.たとえば、参照やポインタなどです.
23.定数式:
値は変更されず、コンパイル期間中に結果を計算できます.
24.constexpr:
定数の定義を宣言し、定数でのみ初期化できます.
constexpr int i=10;

1つの陥没:
const int *p=nullptr;
constexpr int *p=nullptr; 
      ?  。           ,        。

タイプ別名:typedefとusingは別名を宣言します.
 : using money=double ;
     typedef double money;
         。

1つの陥没:
typedef char *pstring;
const pstring p;
const char* p;
     ?   。          。   const    char*  。    p     。
           。

複雑な宣言の場合は、右から左に読むことをお勧めします.まず変数名を探します.変数名と識別子の関係を区別します.識別子には変数名が含まれます.
26.autoとdecltypeタイプ説明子.
autoは、式のタイプでautoタイプを初期化できます.
  int v1=2;
   int v2=3;
   auto x=v1+v2;  //        x   。           ,         decltype.
   decltypde(v1) x; //x    int .              。

27.ヘッドファイル衛士:
ifndef    xxx
#define xxx
#include
class a{};
#ennif

複数回の包含を防止します.
28.練習問題の解答:
2.1
  :
1.int long ,long long ,short    。
                 ,            。long long   。
2.              :
          ,          。
3.float  double    :
    ,    double。

2.2
     unsigned double ;     unsigned double;         unsigned double.

2.3
#include 
using namespace  std;
int main(){
	unsigned u = 10, u2 = 42;
	cout << "u2 - u = "<

2.4
2.3をご覧ください
2.5
//(a) 'a ; L'a' ; "a" ;L"a"					         :char ,wchar_t ,     ,        。
//(b) 10 ;10u ;10L ;10uL ;012; 0xC;	    int,unsigned int ,long int  ,unsigned long int ,8   int,16   int。
//(c)  3.14 ;3.14f ;3.14L						    double ,float, double
//(d)  10 ;10u ;10. ;10e-2;                    int ,unsigned int ,double ,double ,

#include 
using namespace std;
int main(){
	cout << typeid(10e-2).name() << endl;//    typeid().name()   。
	system("pause");
	return 0;
}

2.6
   :
   : int month=9,day=7;  9 7   10    。
   : int month=09,day=07; 09    .            07  8    。

2.7
#include 
using namespace std;
int main(){
	cout << "Who goes with F\145rgus?\012";  //145        。\12  、
	cout << typeid("Who goes with F\145rgus?\012").name() << endl;
	cout << 3.14e1L<

2.8
#include 
using namespace std;
int main(){
	cout << "\062\x4D\012";
	cout << "\062\x9\x4D\012";
	system("pause");
	return 0;
}
//   ASCII    。

2.9
a.   :int input_value; cin>>input_value;
b.   :int i={3.13}         。C++Primer      ,vs2013    
c.   :double salary=wage=99.99; wage    。
d.   :int i=3.13;      。

2.10
global_str empty string;
global_int 0;
local_str     
local_int     

2.11
extern int ix=1024 /definition 
int iy //definition 
extern int iz //declaration

2.12
(a),(c),(d)

2.13
j=100

2.14
   。i        。        i.

2.15
b,d    。

2.16
       ,        。vs2013+win 7 

2.17
output: 10  10 ,  10       

2.18
#include 
using namespace std;
int main(){
	int v1=3,v2=4;
	const int *p = &v1;  //       
	//*p = 3;      
	p = nullptr;  //  
	int * const ptr = &v2;//    
	//ptr = nullptr;     
	*ptr = v1; //  
	system("pause");
	return 0;
}

2.19
  :1.    ,     ,       。
      2.     ,       ,        。

2.20
        i  ,i          。

2.21
 。     。

2.22
1.p     ,   if     。
2.*P     0,   if     。

2.23
        。    *p,        。

2.24
   p  void*   。           。
 lp     long int , i       。
         ,              。

2.25
a)ip    。i   int ,r i   
b)i  int,ip    
c)ip    ,ip2 int 。

2.26
a,d   。const              。

2.27
b,d,e,g

2.28
    :a,b,d,e.              ,    。

2.29
  :a,b,c

2.30
  const: v2,        const.
  const: p2,        const.

2.31
    。     ,    const.     const     ,        ,     const.

2.32
   :    :int null=0,*p=&null;

2.33
42, 42 ,42 ,  ,  ,42.

2.34

2.35
j : int; k:int;p:int const *; j2: int ; k2: int .
#include 
using namespace std;
int main(){
    const int i = 42;
    const auto j = i;
    const auto &k = i;
    auto *p = &i;
    const auto j2 = i, &k2 = i;
    cout << typeid(k2).name();  // typdeid      。
    system("pause");
    return 0;
}
    ,     。    :vs2013+win 7 

 2.36
a:int ; b: int ; c: int ; d: int ;
  :a=4,b=4,c=4,d=4;
#include 
using namespace std;
int main(){
    int a = 3, b = 4;
    decltype(a) c = a;
    decltype((b)) d = a;
    ++c;
    ++d;
    cout << "a= " << a << endl;
    cout << "b= " << b << endl;
    cout << "c= " << c << endl;
    cout << "d= " << d << endl;
    cout << "d's type is :" << typeid(d).name();
    system("pause");
    return 0;
}

2.37
#include 
using namespace std;
int main(){
	int a = 3, b = 4;
	decltype(a) c = a;
	decltype(a=b) d = a;
	cout << "d's type is :" << typeid(d).name();
	system("pause");
	return 0;
}
//  int&         ,    int,         d    int  。       int& ,    。

2.38
  :auto            ; decltype    ,    。
  int&   int ,        ,      。

2.39
#include 
using namespace std;
struct Foo{ }
int main(){
	system("pause");
	return 0;
}
// error C2628: “Foo”   “int”    (     “;”?)
//error C3874 : “main”       “int”  “Foo”
//error C2440 : “return” :    “int”   “Foo”

2.40
#include 
using namespace std;
#include 
struct Foo{ 
	string bookNo;
	unsigned int units_sold;  //                    。
	double revenue;
};
int main(){
	system("pause");
	return 0;
}

2.41

2.42
#ifndef SALES_DATA_H
#define SALES_DATA_H
#include 
#include 
struct Sales_data{
	std::string bookNo;
	unsigned int units_sold;
	double revenue;
};
#endif // !SALES_DATA_H
       header gurd !!!      。         ,      。

End
どうしてこんなに細かく書いたの?私はよく書けないので、本が王道だからです.私は珍しいものしか書けません.そうしないと、本を写すのと同じです.練習問題の解答はただ参考にして、実は解答が正しいかどうかに関心を持つ必要はなくて、できたらできて、できない自分はよく知っているはずです.