C++常见错误

1. 临时变量是常量,因此如果参数定义类型为&类型,则传递临时变量会编译错误;
在求表达式值期间,编译器必须建立临时对象,它们需要存储空间、构造和删除,编译器负责决定他们的去留和存在细节。它自动的成为常量;


2. const返回值:
(1)返回类型是内置类型的const,则const返回值没有意义,编译器视其是一个值而不是一个变量,返回的这个变量值实际是副本;
(2)返回类型是用户定义的const,  则该值不能被复制和修改,即不能作为左值。

3. 在类里不要定义const常量,而要使用enum代替;
(1)使用const定义类内成员的限制在于:
首先,const数据成员不是编译期常量,是在类对象中分配存储空间的,编译器不知道const里的内容是多少。const数据成员一旦初始化即不能改变,且初始化必须在构造函数的初始化表达式列表中;
(2)编译期常量可以使用:
       预处理定义#define,在类里定义enum,  在类里定义static const 数据成员;
其中static const 数据成员不属于单个类对象,而是属于整个类;
使用enum也不会占用对象中的存储空间,enum常量是在编译时被去全部求值的。C++中enum数据不支持++操作符,这一点与C不同;
选择static const数据成员还是enum数据成员区别:enum只能表示整数数据,static const 没有限制;
在一个类中使用static const,表示它既是常量(不会改变),又是静态的(整个类中只有唯一的定一点),所以其实一个编译时常量;       

4. static成员:
类的静态成员拥有一块单独的存储区,所有类对象共享这一块静态存储区,为这些类对象提供了一种互相通信的方法;类的静态数据属于类,它的名字只有类的范围内有效;

静态成员变量的初始化只能在定义时,且一旦这些数据被定义,终端用户就不能再定义,否则连接器会报错;因此,保证定义只出现一次,且是由类的构造者来控制的。

静态数组的初始化:
e.g.

class Value{
    static const int size;
    static const float table[4];
    static char letters[10]; 
};

const int Value::size =100;

const float Value::table[4] = {
    1.1, 2.2, 3.3, 4.4
};

const char   letters[10]= {
    ‘a’, ‘a’,‘a’,‘a’,‘a’,‘a’,‘a’,‘a’,‘a’,‘a’
};

对所有的静态数据,必须提供单一的外部定义,可以放在头文件中。

5. 静态成员函数:
(1) 静态成员函数 不能访问一般的非静态数据成员,也不能调用非静态成员函数。它 只能访问静态数据成员只能调用其他静态成员函数

因为普通成员函数由默认的this指针(当前对象的地址),而static成员函数不属于任何类对象,因此没有this指针。因此静态成员函数无法访问一般的成员函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值