1.引用reference

引用用在的地方:(1)作用于函数参数(2)作用于函数返回类型。对于第一种,很容易理解,就是对函数实参变量的引用(及实参的别名);但对于第二种,作为返回类型时,情况就不大明显,至少本人是这样认为的,考虑下面的代码,此时怎样理解返回的引用。我个人理解:返回的是对全局变量a的引用,这个引用是匿名的,没有明确告诉a变量的别名是什么,我们在使用时,权且就认为这个别名也叫a。

要注意的地方:不能在函数中返回局部变量的引用,会造成意想不到的后果,虽然有时编译器也能通过。

#include<iostream>
using namespace std;

int a;

int &add(int b,int d)

{

a=b+d;

retrun a;

}

void main()

{

add(2,3);

cout<<a<<endl;//输出值为5

add(2,3)=10;//对add返回的引用(即a的别名)赋值

cout<<a<<endl;//输出值为10;

}

 

2.常量const

const用在的地方:(1)定义常类型变量(2)用于修饰函数参数(3)修饰函数返回类型(4)修饰函数体

对于第一种情况,const类型变量在定义时就要初始化,如果是类类型的成员变量,其初始化要使用初始化列表的形式,而不能够使用函数体那样的形式,总之,不能对const变量使用=运算符。对于第二种情况,修饰函数参数,目的就是希望不改变实参的值,比较明显。对于第三种情况,单独使用const,譬如(const int add(int a,int b))没多大意义。对于第四种,一般修饰的是类成员函数,此时该函数不改变对象的成员变量,而且不能调用类中其他非const成员函数。

3.cosnt与引用的联合使用,诸如const int &add(int a,int b)等形式的函数。通过上面的介绍,就好理解了。

4.C++中的临时变量:先上代码

#include<iostream>
using namespace std;
class String
{
public:
 String(const char *value)
 {
  data=new char[strlen(value)+1];
  strcpy(data,value);
 }
 ~String()
 {

 }
 operator const char*() const
 {

//编译器会在此函数体内生成临时char指针,该临时指针将会赋值给调用者

//最终导致调用者str指针也指向data所指的内存空间
  return data;
 }
 friend ostream& operator<<(ostream &os,String B);
private:
 char *data;
};
ostream& operator<<(ostream &os,String B)
{
 os<<B.data<<endl;
 return os;
}
void main()
{
const String B("hello");

//此处B对象可以转成char类型指针,因为有operator char*函数,并且

//该函数返回的是const指针变量,所以的得用const char *str来接,去掉const则出错

const char *str=B;

//strcpy(str,"Hi,mom");
cout<<str<<endl;
cout<<B<<endl;
}