C++ “const常变量”与“非常变量(普通变量)”间的赋值

  今天在写函数时,对函数的形参:“常变量引用”=“非常变量”(√)、“非常变量引用”=“常变量”(×)、…有点懵逼。。。所以,特别做了调试以彻底弄清这些问题!文章目录如下:

1 C++const常变量与引用综述

1.1 常变量

  const常变量也叫只读变量,常变量在程序运行期间不能改变,定义时必须初始化(除初始化外不能作左值;初始化可赋“各种变”(这里你可调试),但不一定能作为定义数组的size)。常变量一般作函数参数(很推荐),还有常指针、常对象等。
  注意符号常量(#define)于内存中不存在储存空间,但const常量存在(且能用szeof()测长度,返回字节数),具有变量的特征(C++推荐用const常变量代替符号常量)。

1.2 引用

  引用即别名,您使用引用就如同使用变量本身!引用必须在声明的同时初始化(除作为函数形参时——您想想也不可能是吧),并且不能有NULL引用(指针可以,但要防野指针鸭~)。一旦成为某个变量的引用,这种“绑定关系”便不能改变(非“常指针”可以随时改变指向)。
  此外,C++参数传递方式原本只有一种:传值方式(形实参为变量、指针/地址)——形实参为指针时,传递的虽是地址但本质为传值(地址这种特殊的整型值),形参能刷新实参的内容,但不能改变实参的指向。有了引用之后便多了传址方式——实参虽为变量名,但传递的是变量地址。

2 常变量与非常变量间的赋值

int a = 1;
const int b = 2;

(1)常变量赋给非常变量:

a=b; //正确

(2)非常变量不能赋给常变量(不作左值):

b=a; //错误

(3)非常变量赋给常引用:

 int c = 3;
 const int &d = c; //正确
 cout<<d<<endl; //3
 c = 4; //c依旧可变
 cout<<d<<endl; //4

(4)常变量不能赋给非常引用

const int e = 5; 
int &f = e; //错误

(5)常变量赋给常引用:

const int h = 6;
const int &i = h; //正确

  因此,大部分时候,我们可酌情将函数形参定义为“常变量”&“常引用”,即:

int func1(const int a) //实参可为:非常变量、常变量
{
	//函数体
}
本质上:系统**忽略了**形参的const!!!

string func2(const string& str ) //实参可为:非常变量、常变量
{
	//函数体
}

string func3(string & str) //实参可为:非常变量(但不能是常变量!)
{
	//函数体
}

3 参考文献

  郭有强,等.C++面向对象程序设计.北京:清华大学出版社,2009.

  • 9
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

C_xxy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值