c++ - string const&和const string&有什么区别吗?
黄舟
黄舟 2017-04-17 13:59:00
0
2
1609

string const&和const string&有什么区别吗?

例如

#include <iostream>
using namespace std;

int main()
{
    string b = "test";
    const string &a = b;
    string const &c = b;
    return 0;
}
黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全員に返信(2)
刘奇

并没有区别。

我们先从C/C++的变量声明方式说起。
最简单的声明方式如int a,表明声明了一个变量a,并使得a是int类型
那么按照上文的说法,声明int *a表明声明了一个变量*a,并使得*a是int类型
我们已经知道(*a)是int类型了,而星号是解引用运算符,(*a)表明变量a所指向的内存地址的数据。从这一层意义上,我们推断出了a的类型为int的指针类型。
a的类型为int指针,那我们怎么表示呢?考虑到C常见的声明方式是类型名+变量名,在声明int*a中,既然a是变量名,所以int*就是类型名咯,于是我们就用int*来表示int指针类型
同理,int &a可以认为是声明了一个int类型的变量(&a),通过&运算符意义得知a是int引用类型,并用int&来表示int引用类型

扯回正题,string const &a声明了一个(&a),(&a)是string类型且为常量
const string &a声明了一个(&a),(&a)是常量且为string类型
这显然是同一个意思啊~

稍微扯远一点,来看用来坑小朋友的辨析题,const char *achar * const a
前者声明(*a),(*a)是const char类型的。a被一个解引用运算符修饰,故a是个普通的指针,可以修改,但是a所指向的数据(即*a)由于const的修饰而不可修改
后者声明(*const a),(*const a)是char类型的。a被一个解引用运算符和一个const关键词修饰,故a是个不可修改的指针,但是a所指向的数据(即*a)可以被修改

char const *aconst char *a是同一个意思,而如果既不允许a被修改,也不允许a所指向的数据被修改,那么需要声明为const char * const a

いいねを押す +0
PHPzhong

没有区别。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート