`
Conviction
  • 浏览: 5876 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

C++表达式

阅读更多

1.箭头操作符

如果p是一个指向对象的指针,(*p).foo;等价于p->foo;

 

2.条件运算符

cond?expr1:expr2;

(1)避免使用条件运算符的深度嵌套

(2)在输出表达式中使用条件操作符

 

3.sizeof操作符

sizeof操作符的作用是返回一个对象或类名的长度,返回值类型为size_t。

对数组做sizeof操作符等效于将对其元素类型做sizeof操作的结果乘上数组元素的个数。

int sz = sizeof(ia)/sizeof(*ia);

 

4.逗号操作符

逗号表达式是一组由逗号分隔的表达式,这些表达式从左向右计算。

 

5.new 和 delete表达式

new和delete表达式动态创建和释放数组,这两种表达式也可以用于创建和释放单个对象。

(1)动态创建duixiang 的初始化

int i(1024);
int *pi = new int(1024);
string s(10,'9');
string *ps = new string(10,'9');

 (2)动态创建对象的默认初始化

int *pi = new int;//内置类型的对象无初始化
string *ps = new string;//调用类的默认构造函数初始化

 除了对其赋值之外,对未初始化的对象所关联的值的任何使用都是没有定义的。

int *pi = new int;	//无初始化
int *p1 = new int();   //初始化为0

 6.撤销动态创建的对象

动态创建的对象用完后,程序员必须显式地将该对象占用的内存返回给自由存储区。

int *p1 = new int();//初始化为0
delete p1;

 注意:如果指针指向不是用new分配的内存地址,则在该指针上使用delete是不合法的。

如果指针的值为0,则在其上做delete操作是合法的,但这样做没有任何意义:

int *ip = 0;
delete ip;

 C++保证,删除0值的指针是安全的。

7.在delete之后,重设指针的值

delete p;之后,P变成没有定义。在很多机器上,尽管p没有定义,担仍然存放了它之前所指向对象的地址,然而p所指向的内存已经被释放,因此p不再有效。删除指针后,该指针变成悬垂指针。悬垂指针指向曾经存放对象的内存,但该对象已经不再存在了。悬垂指针往往导致程序错误,而且很难检测出来

注意:一旦删除了指针所指向的对象,立即将指针置为0,这样就非常清楚地表明指针不再指向任何对象。

 

8.类型转换

显示转换:也叫强制类型转换(cast),包括以下名字命名的强制类型转换操作符:static_cast、dynamic_cast、const_cast和reinterpret_cast。虽然有时候需要强制类型转化,但是它们本质上是非常危险的。const_cast将转换掉表达式的const性质。

建议:避免使用强制类型转换。

虽然标准C++仍然支持旧式强制类型转换,但是我们建议,只有在C语言或标准C++之前的编译器编写代码时,才使用这种语法。 char *pc = (char*) ip;

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics