c++第二十二天

p120~p124:

表达式

1、表达式由一个或者多个运算对象组成。

 

2、最简单的表达式是字面值和变量。

 

3、一元运算符作用于一个运算对象,二元则作用于两个。一个运算符到底是几元由上下文决定。

 

4、重载运算符。仅改变运算对象和返回值的类型,运算对象的个数,运算符的优先级、结合律无法被改变。

 

5、左值与右值。暂且理解为:左值就是Location,可以放在赋值号的两边,右值就是Read,只能放在赋值号的右边。(例如&a返回一个右值,a[2]的求值结果为左值)

 

6、左值是可以存放东西的,而右值是只能Read的。

 

7、在运算时,高优先级的运算符与运算对象更为紧密地组合在一起,如果运算符的优先级相同,则由结合律决定组合运算对象的顺序。

例如:算数运算符满足左结合律,则按照从左向右的顺序组合运算对象。

(但是运算对象的求值顺序与优先级和结合律无关,例如:f() + g() + h()并不知道哪个函数会先计算)

 

8、括号无视优先级与结合律。

 

9、求值顺序。对于表达式 f1() * f2()并不知道优先计算f1()还是f2(),

对于表达式 cout << i << " " << ++i << endl 输出是未定义的,可能是 1 1 也可能是 0 1。

明确规定运算顺序运算符只有四个: && || ?: ,

 

10、c++左值与右值

int main()
{
    int *p;    // p是一个指向整型的指针
    int a = 1;
    decltype(*p) q = a;    // decltype(返回结果为左值的表达式)的结果是引用类型。这里的q类型为 int&
    // 类似的例子还有 decltype((变量))
    // 补充一点:引用从来都作为所指对象别名出现,只有出现在decltype(里面)是一个例外。
    return 0;
}

 补充:decltype(&p)结果类型为 int**

 

练习 4.1

105

 

练习 4.2

(a)(*vec).begin()

(b)((*vec).begin()) + 1

 

练习 4.3

略 

posted @ 2017-02-23 14:09  xkfx  阅读(140)  评论(0编辑  收藏  举报