C++自学笔记_3种操作符_《C++ Primer》

1. 箭头操作符

  C++为包含点引用操作符和解引用操作符的表达式提供了一个同义词:箭头操作符(->)。

  点操作符用于获取类类型对象的成员:

item.same_isbn(item2);   //item是个类类型对象,same_isbn(Sales_item item)是该对象定义的方法

  假如现在有指向Sales_item对象的指针或者迭代器,则在使用点操作符前,需要先对改指针或者迭代器进行解引用:

Sales_item *sp=&item1;
(*sp).same_isbn(item2); //注意要用括号括起来,因为解引用操作符的优先级低于点操作符

  上述代码没有问题,但是容易出错,所以C++定义的箭头操作符。

  上述代码可以直接这么写:

Sales_item *sp=&item1;
sp->same_isbn(item2);

  放道习题:

  假设iter为 vector<string>::iterator 类型的变量,指出下面哪些表达式是合适的?并解释这些合法表达式的行为。

  (a) *iter++;          (b) (*iter)++;          (c) *iter.empty();

  (d) iter->empty();       (e) ++*iter;           (f) iter++->empty();

  解答:

  (a)是合法的,后自增操作符的优先级要高于解引用操作符,但是要注意的是如果有返回的值,返回的对象是迭代器增加前指向的对象而不是增加后指向的对象,虽然后自增先执行。

  (c)是非法的,点操作符的优先级高于解引用操作符(点操作符的优先级很高啊...)

  (d)是合法的,这就是上面所说的内容,意思是调用iter所指向的对象的empty()方法。

  (e)是非法的,前自增操作符的优先级等于解引用,所以遵循从左至右的顺序,所以如果是*++iter就对了。

  (f)是合法的,先执行和(d)一样的操作,完了以后iter加1。

2. 条件操作符

  条件操作符是C++中唯一的三元操作符。这里就说明它的一个用途:使用嵌套的条件操作符求出三个变量的最大值,并将最大值赋值给max.

int main(){
    int a=7,b=9,c=8;
    int max=a>b?a>c?a:c:b>c?b:c;
    cout<<max<<endl;
    return 0;
}

3. sizeof操作符

  sizeof操作符的作用是返回一个对象或类型名的长度,单位是字节

  ·对char类型或者值为char类型的表达式做sizeof操作保证得1。

  ·对引用类型做sizeof操作将返回存放此引用类型对象所需的内存空间大小。

  ·对指针做sizeof操作将返回存放指针所需要的内存大小;注意:如果要获取该指针所指向的对象的大小,则必须对该指针进行解引用。

  ·对数组做sizeof操作等效于将对其元素类型做sizeof操作的结果乘上数组元素的个数。因为sizeof返回整个数组在内存的存储长度,所以用sizeof数组的结果除以sizeof其元素类型的结果,即可求出数组元素的个数。

int x[10];
int *p=x;
cout<<sizeof(x)/sizeof(*x)<<endl;    //10
cout<<sizeof(p)/sizeof(*p)<<endl;    //1

  关于对类对象调用sizeof操作符。

Sales_item item;
int a=sizeof(item);
cout<<a<<endl;      //a=16

完了。

原文地址:https://www.cnblogs.com/Murcielago/p/4121780.html