您的位置:首页 > 编程语言 > C语言/C++

c++ primer 的第一天和第二天的学习

2015-11-15 20:24 302 查看
</pre><p>   <span style="BACKGROUND-COLOR: #33ccff">这两天没有太多的事情,c++primer是我大一下学期的时候买的,看过一段时间,之后又没再看,现在大二上学期,在学面向程序设计语言,这两天在回顾c++primer的时候,有的地方会比原先明白很多,有的地方还不是特别的明白,</span></p><p><span style="font-size:18px;BACKGROUND-COLOR: #33ccff">而我野会把我不会的,和我自己不熟悉的基础知识在这个博客中慢慢记录,可以见证我的成长吧。</span></p><p><span style="BACKGROUND-COLOR: #33ccff"></span> </p><p> <span style="font-size:18px;"> <span style="color:#3333ff;">2.1 基本内置类型</span></span></p><p><span style="font-size:18px;color:#3333ff;">    2.1.2 类型的转换</span></p><p><span style="font-size:18px;color:#3333ff;">         signed char c = 256;   <span style="color:#ff0000;"> //</span><span style="color:#009900;">  </span><span style="color:#ff0000;">c的值是未定义的</span></span></p><p>              <span style="font-size:18px;"><span style="color:#ff0000;">当我们赋给带符号类型的一个超出它表示范围的值时,结果是未定义的。此时,程序可能继续工作,可能崩溃</span></span></p><p><span style="font-size:18px;color:#cc0000;">也可能产生垃圾数据</span></p><p>     </p><p>      <span style="font-size:18px;color:#3333ff;"> 含有无符号类型的表达式(unsigned)</span></p><p><span style="font-size:18px;color:#3333ff;">(1)无符号的运算</span></p><p><span style="font-size:18px;color:#3333ff;">        unsigned u = 10;</span></p><p><span style="font-size:18px;color:#3333ff;">         int i = -42;</span></p><p><span style="font-size:18px;color:#3333ff;">         cout << i + i << endl;   // 输出 -84</span></p><p><span style="font-size:18px;color:#3333ff;">         cout << u + i << endl;  //  输出 4294967264(int 占32位)</span></p><p><span style="font-size:18px;color:#3333ff;">(2)无符号的循环算法</span></p><p><span style="font-size:18px;color:#3333ff;">        for(unsigned u = 10; u>= 0; --u)</span></p><p>                           <span style="font-size:18px;color:#3366ff;">  cout << u << endl;</span></p><p>            <span style="font-size:18px;color:#ff0000;"> 当u为-1时,对u进行取模,得到一个大数,再次循环</span></p><p><span style="color:#009900;"></span> </p><p> <span style="font-size:18px;color:#3366ff;">  2.1.3  字面值常量</span></p><p><span style="font-size:18px;color:#3366ff;">         整型和浮点型字面值</span></p><p><span style="font-size:18px;color:#3366ff;">               20  // 十进制</span></p><p><span style="font-size:18px;color:#3366ff;">               <span style="color:#ff0000;">0</span>24  // 八进制</span></p><p><span style="font-size:18px;color:#3366ff;">               <span style="color:#ff0000;">0x</span>14 || <span style="color:#ff0000;">0X</span>14 // 十六进制</span></p><p><span style="font-size:18px;color:#3366ff;"></span> </p><p><span style="font-size:18px;color:#3366ff;">           浮点字面值用小数点(3<span style="color:#ff0000;">.</span>1415)或科学计数法(3.1415<span style="color:#ff0000;">E</span>0或3.1415<span style="color:#ff0000;">e</span>0)表示</span></p><p><span style="font-size:18px;color:#3366ff;"></span> </p><p><span style="font-size:18px;color:#3366ff;">2.2 变量</span></p><p><span style="font-size:18px;color:#3366ff;">   2.2.2 声明和定义  关键字(extern)</span></p><p><span style="font-size:18px;color:#3366ff;"></span>                <span style="color:#3366ff;"> <span style="font-size:18px;">如果在多文件中使用同一个变量,必须将声明和定义分离</span></span></p><p><span style="font-size:18px;color:#3366ff;">                 变量的定义必须出现在且只能出现在一个文件中,其他用到该变量的文件必须对其进行声明,却绝不能重复定义</span></p><p><span style="font-size:18px;color:#3366ff;"></span> </p><p><span style="font-size:18px;color:#3366ff;">2.3 复合类型</span></p><p><span style="font-size:18px;color:#3366ff;">    2.3.1 引用</span></p><p><span style="font-size:18px;color:#3366ff;">          int ival = 1024;</span></p><p><span style="font-size:18px;color:#3366ff;">          int &refval = ival;  // refval 指向ival,是ival的另一个</span></p><p><span style="color:#3366ff;"><span style="font-size:18px;">          int &refval2;            // <span style="color:#ff0000;">报错:引用必须被初始化</span></span></span></p><p><span style="font-size:18px;color:#ff0000;">       引用和初始值绑定在一起,而不是将初始值拷贝给引用,因为无法令引用重新绑定到另一个对象,因此引用必须初始化</span></p><p><span style="font-size:18px;color:#ff0000;"></span> </p><p><span style="font-size:18px;color:#3366ff;">2.4 const 限定符</span></p><p> </p><p>     <span style="font-size:18px;color:#ff0000;">   cont 对象一旦创建后其值就不能再改变,所以const对象必须初始化</span></p><p><span style="font-size:18px;color:#ff0000;">                 const int i = get_size ();          // 正确:运行时初始化</span></p><p><span style="font-size:18px;color:#ff0000;">                 const int j = 42;                       // 正确:编译时初始化</span></p><p><span style="font-size:18px;color:#ff0000;">                 const int k;                               // 错误:k是一个未经初始化的常量</span></p><p>          <span style="font-size:18px;color:#3366ff;"> 如果想在多个文件共享用一个const对象,在变量定义前加上关键字extern</span></p><p>        <span style="BACKGROUND-COLOR: #ffffff"> <span style="font-size:18px;">  <span style="color:#3366ff;"> 例如:// file_1.cc 定义并初始化一个变量,该常量能被其他文件访问</span></span></span></p><p><span style="font-size:18px;color:#3366ff;BACKGROUND-COLOR: #ffffff">                         extern const int bufsize = fcn();</span></p><p><span style="font-size:18px;color:#3366ff;BACKGROUND-COLOR: #ffffff">                       // file_1.h 头文件 </span></p><p><span style="font-size:18px;color:#3366ff;">                extern const int bufsize      // 与file_1.cc中定义的bufsize是同一个</span></p><p><span style="font-size:18px;color:#3366ff;"></span> </p><p><span style="font-size:18px;color:#3366ff;">2.4.1</span></p><p><span style="font-size:18px;color:#3366ff;">      初始化和对const的引用</span></p><p><span style="font-size:18px;color:#3366ff;">  (1)允许为一个常量引用绑定非常量的对象,字面值,甚至是一个一般表达式:</span></p><p><span style="font-size:18px;color:#3366ff;">                        int  i = 42;</span></p><p><span style="font-size:18px;color:#3366ff;">                        const int &r1 = i;              // 非常量对象</span></p><p><span style="font-size:18px;color:#3366ff;">                        const int &r2 = 42;           // 字面值</span></p><p><span style="font-size:18px;color:#3366ff;">                        const int &r3 = r1 * 2;       // 一般表达式</span></p><p><span style="font-size:18px;color:#3366ff;">                        int &r4 = r1 * 2;                <span style="color:#ff0000;"> // 错误,r4是一个普通的非常量引用</span></span></p><p><span style="font-size:18px;color:#3366ff;">2.4.2</span></p><p><span style="font-size:18px;color:#3366ff;">        指针和const</span></p><p><span style="font-size:18px;color:#3366ff;">       <span style="color:#ff0000;"> 指向常量的指针(const int *)和常量引用(const int &)指的是不能改变所指对象的值,而没有规定那个值</span></span></p><p><span style="font-size:18px;color:#ff0000;">不能通过其它路径改变(可以是常量(const int),非常量(int))</span></p><p><span style="font-size:18px;color:#3366ff;">          </span></p><p><span style="font-size:18px;color:#3366ff;">        const 指针(int * const)----- 常量指针</span></p><p><span style="font-size:18px;color:#3366ff;">        指针是对象而引用不是,因此可以把指针本身定义为常量。<span style="color:#ff0000;">常量指针必须初始化,而一旦完成初始化,它的值就不能发生改变。</span></span></p><p><span style="font-size:18px;color:#ff0000;">         int errNumb = 0;</span></p><p><span style="font-size:18px;color:#ff0000;">         int * const curErr = &errNumb  // curErr 将一直指向errNumb</span></p><p><span style="font-size:18px;color:#3366ff;">2.4.4</span></p><p><span style="font-size:18px;color:#3366ff;">       (常量表达式)是<u><span style="color:#ff0000;">指值不会改变</span></u>,并且在<u><span style="color:#ff0000;">编译过程就能得到计算结果</span></u>的表达式:</span></p><p><span style="font-size:18px;color:#3366ff;">                         </span></p><pre class="cpp" name="code">     const int max_files = 20;         	// 常量表达式
const int limit = max_files + 1;		// 常量表达式
int staff_size = 27;				// staff_size的值会改变
const int sz = get_size();			// 运行时才会得到结果


constexpr 变量:

将变量声明为constexpr类型以便由编译器来验证变量的值是否是一个常量表达式,声明constexpr的变量一定是一个常量,而且必须用常量表达式初始化:

constexpr int mf = 20;			// 20是常量表达式
constexpr int limit = mf + 1;		// mf+1是常量表达式
constexpr int sz = size()			// 只有当size是一个constexpr函数时,才是一条正确的声明语句
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: