关于C++引用运算符&的若干学习笔记
转载Q1: 引用初始化的右值不能是立即数吗?
A1:未必,对于const引用初始化的右值可以是立即数或者表达式。如
const int& a = 3; const double &b = 3.14+a;
Q2: 对于常量的引用,其值是否绝对不可修改?
A2:未必,看如下代码:
int a = 3; const int& b = a;a = 4; cout << b << endl;
只要被引用对象被修改,引用值一样可以修改。
Q3: 可以将常量传递给非常量引用吗?
A3:不可,否则会有语法错误,但是变量可以传递给常量引用:
int a = 3;
const int aa = 4;
const int &b = a; // 合法
int &bb = aa; // 不合法!
Q4:为什么函数的参数推荐如果不作修改的话用const TYPE&...,而作修改的用TYPE&……呢?
A4:
1,效率:按引用调用不需要产生副本,它只是原变量的别名。
2,可读性:如果要修改变量,和按指针传递传递比起来,可读性好很多。比如swap
void swap(int* a, int* b)
{
int temp = *a;
*a = *b;
*b = temp;
}
而按引用调用则是
void swap(int& a, int& b)
{
int temp = a;
a = b;
b = temp;
}
对于不作修改的值,const是推荐的也是必要的,保证其值不被修改只是一方面,另一方面,因为我们知道要传递的是不做修改的值,也就是允许我们传递常量,如果参数不加const,正如之前所言,将常量传递给非常量的引用将出现语法错误,所以const必须加上。
上一篇:C/C++的assert断言机制
下一篇:1. 对素数相关的知识理解预处理
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
C++的拷贝构造和运算符重载
C++的拷贝构造和运算符重载
拷贝构造函数 运算符重载 -
Scala 运算符Scala
-
C++ 解引用运算符
在C++编程中,指针是一种非常重要的数据类型,它可以指向内存中的地址,让程序可以访问到变量或对象。指针的解引用运算符(*
c++ 开发语言 成员变量 成员函数 运算符 -
C++学习之运算符
注意,上面使用的是整型变量,但算术运算符同样适用于其他支持数值类型的变量,如浮点数、长整型等。注意,赋值运算符将右侧
c++ 学习 开发语言 运算符 操作数 -
C++解引用与递增运算符
*p++等价于*(p++)
c++ c 学习 -
C++快速笔记 3运算符
C++快速笔记 3 运算符。常用的运算符(算术、比较、逻辑)
赋值 算术运算符 赋值运算符