《C++ Primer》读书笔记(4.2,4.4,4.5,4.6)

本文详细介绍了C++中的取模、条件、递增递减及sizeof等运算符的使用方法和注意事项,包括它们的行为特点、语法格式以及一些典型的应用场景。

关于%

取模[modulus]或求余[remainder]操作符 

21 % -5; // 机器相关 : 结果为 -1 或 1 

如果有一个 或两个 操作数为负 余数的符号则取决于机器 因此 移植性无法保证


 elem_cnt = elem_cnt + (*iter < some_value) 
 *iter < some _value 的布尔值 将提升为 1或 0 


        int ia[ array_size ] = { 0, 1, 2, 2, 3, 5, 8, 13 }; 
        int *pia = ia;
    是非法的 尽管ia 是个左值 但是数组对象本身不能被赋值 只有它包含的元素才能被赋值   as没有这个限制

递增和递减操作符

递增 ++     和递减 --     操作符为对象加1 或减1 操作提供了方便简短的表示

ivec[ ix_vec++ ] = ia[ ix_ia-- ]; 
在用ix_vec 的当前值索引ivec 之后 将ix_vec递增1


ivec[ ++ix_vec ] = ia[ --ix_ia ]; 
在ix_vec 的值被用来索引ivec 之前 它先被递增变成1

条件操作符

cout << "The larger value of "<< i << " and " << j << " is "<< ( i > j << i : j ) << endl; 
 ( i > j << i : j ) 这里的<<就相当于a?b:c


sizeof 操作符

siseof 操作符的作用是返回一个对象或类型名的字节长度 它有以下三种形式 

         sizeof (type name ); 
         sizeof ( object ); 
         sizeof object; 

返回值的类型是size_t        这是一种与机器相关的typedef 定义 我们可以在cstddef 头文件中找到它的定义 下面的例子使用了sizeof 的两种格式 
         #include <cstddef> 
         int ia[] = { 0, 1, 2 }; 

         // sizeof返回整个数组的大小 
         size_t array_size = sizeof ia; 

         // sizeof返回 int类型的大小 
         size_t element_size = array_size / sizeof( int ); 
    当sizeof 操作符应用在数组上时 例如上面例子中的ia  它返回整个数组的字节长度 而不是第一个元素的长度 也不是ia 包含的元素的个数


         #include <string> 
         #include <iostream> 
         #include <cstddef> 

         int main() 
         { 
               size_t ia; 
               ia = sizeof( ia ); // ok 
               ia = sizeof ia; // ok 

               // ia = sizeof int; // 错误 
               ia = sizeof( int ); // ok 
               int *pi = new int[ 12 ]; 
               cout << "pi: " << sizeof( pi ) 
                   << " *pi: " << sizeof( *pi ) 
                   << endl; 

               // 一个 string的大小与它所指的字符串的长度无关 
               string st1( "foobar" ); 
               string st2( "a mighty oak" ); 
               string *ps = &st1; 
               cout << "st1: "     << sizeof( st1 ) 
                   << " st2: "     << sizeof( st2 ) 
                   << " ps: "      << sizeof( ps ) 
                   << " *ps: "     << sizeof( *ps ) 
                   << endl; 
               cout << "short :\t" << sizeof(short) << endl; 
               cout << "short* :\t"<< sizeof(short*)       << endl; 
               cout << "short& :\t"<< sizeof(short&)       << endl; 
               cout << "short[3] :\t" << sizeof(short[3]) << endl; 
         }
编译并运行它 产生如下结果 
         pi: 4 *pi: 4 
         st1: 12 st2: 12 ps: 4 *ps: 12 
         short : 2 
         short* : 4 
         short& : 2 
         short[3] : 6 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值