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

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

PHPzhong

沒有差別。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板