c++/c 学习笔记——基础(2)

来源:互联网 发布:jre 8u45 windows x64 编辑:程序博客网 时间:2024/05/18 02:38
  1. 表达式
    1. 算术运算符。需要注意的是%运算符,c11以后将其统一,即若m%n=d,则d的符号与m相同。n的符号不影响结果,可忽略。
    2. 逻辑运算符。逻辑与和逻辑或运算符的顺序为从左至右,其采用短路运算,即若左边的表达式可得出最后的结果,则右边的表达式便不会再计算。
    3. 赋值运算符。赋值运算符满足右结合律,且优先级较低。
    4. 递增、递减运算符。尽量使用前置,开销较小。另,对于存在递增、递减运算的复合表达式中,求值顺序未定义。如:
      #include <iostream>#include <vector>#include <cctype>using namespace std;//vs 报错,gcc 可以通过。int main() {vector<char> s = { 'a', 'b', 'c', 'd' };vector<char>::iterator beg = s.begin();while (beg != s.end() && !isspace(*beg)){*beg = toupper(*beg++);}for (auto i : s){cout << i << endl;}return 0;}

      这会产生歧义的。
    5. 条件运算符。?:,优先级比较低,特别要注意在其比<<优先级低,所在在输入输出等复合操作中请添加();
    6. 移位运算符。满足左结合律,其已被c++重载。用于IO,所以在IO中,要关注一点,关于其左结合律的使用。
    7. sizeof运算符。其运算对象有两种情况 , 一是sizeof(expr) ,另一是sizeof expr。另对数组扫行sizeof 会返回整个数组的大小,对指针,仅会返回该指针所占的大小,对指针的解引用,也仅返回所指对象的大小,对引用的,会返回所引用对象的大小。
    8. 逗号运算符,按从左到右。
  2. 类型转换
    1. 若不同数值类型参加运算,一个基本规律,保留更多的精度,从此可以得知,转换方向向更大类型靠拢。所以bool->char->short->int->long->long long;int->float->double
    2. 无符号数与有符号数,统一转到无符号数
    3. 数组除decltype,取地址符,sizeof及typeid等运算时不转换外,其余大部分情况会转换,最著名的便应该是函数的数组参数。
    4. 指针的转换。指向任意非常的指针都可以转为void*,指向任意对象的指针都可以转为const void*,子类可以转为父类的指针。
    5. 显示转换,static_cast<>,可以把任意非底层const进行转换的,顶层是可以的。const_cast<>只是针对底层的,去除掉const属性。reinterpret_cast和硬件实现相关,dynamic_cast支持动态时类型实别。
  3. 基本 语句
    1. 悬垂if,使用{}
    2. switch中内部变量定义,小问题要注意,若为某个分支定义一个变量,置于{}中。
    3. 范围for, 这个好像没什么要说的。
    4. try{}catch{} c++中的异常处理另说。语法上没什么要说的。
0 0
原创粉丝点击