C++ Primer 学习笔记_17_表达式(续1) --箭头、条件、sizeof、逗号表达式与复合表达式求值
表达式
--箭头、条件、sizeof、逗号表达式与复合表达式求值
1、C++为包含点操作符和解引用操作符的表达式提供了一个同义词:箭头操作符(->)
Sales_item *sp = &item; (*sp).same_isbn(item_other); sp -> same_isbn(item_other); //与上一条语句相同
//P142 习题5.18 int main() { vector<string *> strVec; string value; while (cin >> value) { string *pstr = new string; *pstr = value; strVec.push_back(pstr); } for (vector<string *>::iterator iter = strVec.begin(); iter != strVec.end(); ++iter) { cout << **iter << " size: " << (**iter).size() << endl; } for (vector<string *>::iterator iter = strVec.begin(); iter != strVec.end(); ++iter) { delete *iter; } return 0; }
2、条件表达式的优先级相当低,通常都需要用圆括号将表达式扩起来
cout << (i < j ? i : j) << endl; cout << (i < j) ? i : j << endl; //ERROR cout << i < j ? i : j << endl; //ERROR
//P144 习题5.21 int main() { vector<int> ivec; int value; freopen("input.txt","r",stdin); while (cin >> value) { ivec.push_back(value); } for (vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); ++iter) { *iter = (*iter % 2 ? *iter * 2 : *iter); cout << *iter << ‘ ‘; } cout << endl; }
3、sizeof操作符
sizeof操作符返回一个对象或类型名的长度,返回值类型为size_t,长度单位为字节。
sizeof表达式的结果是编译时常量。
Sales_item item,*pi; cout << sizeof(Sales_item) << endl; cout << sizeof item << endl; cout << endl; cout << sizeof(pi) << endl; cout << sizeof(*pi) << endl; cout << endl; cout << sizeof(9 + 8) << endl; cout << endl; char *p = new char[50]; cout << sizeof(p) << endl; cout << sizeof(*p) << endl; cout << endl; char arr[50]; cout << sizeof(arr) << endl; cout << sizeof(*arr) << endl; cout << sizeof(char) << endl; cout << endl; Sales_item &refiterm = item; cout << sizeof(refiterm) << endl;
4、逗号操作符
逗号表达式是一组由逗号分割的表达式,这些表达式从左到右进行计算。然而,逗号表达式的结果是其最右边表达式的值。
5、复合表达式中优先级和结合性决定了表达式的哪个部分用作哪个操作符的操作数,但是还可以通过使用圆括号强制实现某个特殊的分组,因为圆括号凌驾于优先级之上。
6、求值顺序
除了&&、||与?:运算符外,未指定操作符的运算顺序。
当操作符的两个操作数涉及到同一个对象,并改变其值时,操作数的计算顺序才会影响结果。
C++并不保证计算是从左到右的!
【P149建议:复合表达式的处理值得一读!】
在一个表达式里,不要在两个或更多的子表达式中对同一个对象做自增或自减操作。
C++ Primer 学习笔记_17_表达式(续1) --箭头、条件、sizeof、逗号表达式与复合表达式求值,古老的榕树,5-wow.com
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。