天天看点

[C++ 面试基础知识总结]表达式和函数[C++ 面试基础知识总结]表达式和语句

参考书籍:《c++ primer》

<a href="#c-%e9%9d%a2%e8%af%95%e5%9f%ba%e7%a1%80%e7%9f%a5%e8%af%86%e6%80%bb%e7%bb%93%e8%a1%a8%e8%be%be%e5%bc%8f%e5%92%8c%e8%af%ad%e5%8f%a5">c 面试基础知识总结表达式和语句</a>

<a href="#%e7%9b%ae%e5%bd%95">目录</a>

<a href="#%e8%bf%90%e7%ae%97%e7%ac%a6%e4%bc%98%e5%85%88%e7%ba%a7">运算符优先级</a>

<a href="#%e7%ae%97%e6%95%b0%e8%bf%90%e7%ae%97%e7%ac%a6">算数运算符</a>

<a href="#%e8%bf%90%e7%ae%97%e5%af%b9%e8%b1%a1%e8%bd%ac%e6%8d%a2">运算对象转换</a>

<a href="#%e5%95%86%e5%92%8c%e4%bd%99%e6%95%b0">商和余数</a>

<a href="#%e9%80%bb%e8%be%91%e8%bf%90%e7%ae%97%e7%ac%a6">逻辑运算符</a>

<a href="#%e5%bc%ba%e5%88%b6%e8%bd%ac%e6%8d%a2%e7%b1%bb%e5%9e%8b">强制转换类型</a>

<a href="#%e6%95%b0%e7%bb%84%e5%bd%a2%e5%8f%82%e5%92%8c%e8%bf%94%e5%9b%9e">数组形参和返回</a>

<a href="#%e4%b8%8d%e8%83%bd%e8%bf%94%e5%9b%9e%e5%b1%80%e9%83%a8%e5%87%bd%e6%95%b0%e7%9a%84%e6%8c%87%e9%92%88%e5%92%8c%e5%bc%95%e7%94%a8">不能返回局部函数的指针和引用</a>

<a href="#%e9%87%8d%e8%bd%bd%e5%87%bd%e6%95%b0">重载函数</a>

<a href="#%e9%a2%84%e5%a4%84%e7%90%86%e5%99%a8%e5%8f%98%e9%87%8f">预处理器变量</a>

<a href="#%e5%87%bd%e6%95%b0%e6%8c%87%e9%92%88">函数指针</a>

[C++ 面试基础知识总结]表达式和函数[C++ 面试基础知识总结]表达式和语句
[C++ 面试基础知识总结]表达式和函数[C++ 面试基础知识总结]表达式和语句

小整数类型(bool,char,short)进行运算时通常会提升成较大的整数类型int。

最终得到b2值为true,原因在于bool值不能直接进行算数运算,需要转化成int,-b的结果是-1,不等于0,所以b2的值为真。

c++11新标准则规定商一律向0取整,所以-(m)/n和m/(-n)都等于-(m/n),m%(-n)等于m%n,(-m)%n等价于-(m%n)。

&amp;&amp;和||都是短路求值,仅当左侧运算对象无法确定表示结果时才会计算右侧运算对象。

输出结果为1,因为执行++i == 1后,已经可以判定整个表达式为真了,不用再去计算右侧运算对象了,++i == 0没有执行,所以只对i进行了一次递增操作。

<code>static_cast</code>可以进行不包含底层const的类型转换,<code>const_cast</code> 只能改变运算对象的底层const。

数组是无法拷贝的,所以我们为函数传递一个数组时,实际上传递的是指向数组首元素的指针。函数也不能返回数组,只能返回数组的指针或引用。

局部对象在函数完成后,它所占的的存储空间也随之被释放掉,因此,函数终止意味着局部变量的指针或引用将指向不再有效的内存区域。

两个返回都是错误的,试图返回局部变量或局部临时值的引用。

重载函数名字和返回类型相同,但形参列表不同。顶层const不影响传入函数的对象,而底层const会。

如果在内层作用域中声明名字,将会隐藏外层作用域的同名实体。在不同的作用域无法重载函数名。

确定某次调用该选用哪个重载函数时会进行函数匹配,如果有且仅有一个函数匹配情况优于其它所有函数,则匹配成功,否则会因调用二义性而失败。

匹配优先级:

1.精确匹配:类型相同,数组类型或函数类型转化成对应的指针,顶层const

2.转换const

3.类型提升

4.算数类型转换或指针转换

5.类类型转换

预处理定义的5个用于程序调试很有用的名字。

函数指针指向的是函数,它的类型由返回类型和形参共同决定。

继续阅读