84669 Lernen von Personen
152542 Lernen von Personen
20005 Lernen von Personen
5487 Lernen von Personen
7821 Lernen von Personen
359900 Lernen von Personen
3350 Lernen von Personen
180660 Lernen von Personen
48569 Lernen von Personen
18603 Lernen von Personen
40936 Lernen von Personen
1549 Lernen von Personen
1183 Lernen von Personen
32909 Lernen von Personen
string const&和const string&有什么区别吗?
例如
#include <iostream> using namespace std; int main() { string b = "test"; const string &a = b; string const &c = b; return 0; }
人生最曼妙的风景,竟是内心的淡定与从容!
并没有区别。
我们先从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引用类型
int a
int *a
类型名+变量名
int*a
变量名
类型名
int*
int &a
扯回正题,string const &a声明了一个(&a),(&a)是string类型且为常量而const string &a声明了一个(&a),(&a)是常量且为string类型这显然是同一个意思啊~
string const &a
const string &a
稍微扯远一点,来看用来坑小朋友的辨析题,const char *a和char * const a前者声明(*a),(*a)是const char类型的。a被一个解引用运算符修饰,故a是个普通的指针,可以修改,但是a所指向的数据(即*a)由于const的修饰而不可修改后者声明(*const a),(*const a)是char类型的。a被一个解引用运算符和一个const关键词修饰,故a是个不可修改的指针,但是a所指向的数据(即*a)可以被修改
const char *a
char * const a
char const *a和const char *a是同一个意思,而如果既不允许a被修改,也不允许a所指向的数据被修改,那么需要声明为const char * const a
char const *a
const char * const a
没有区别。
并没有区别。
我们先从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 *a
和char * const a
前者声明(*a),(*a)是const char类型的。a被一个解引用运算符修饰,故a是个普通的指针,可以修改,但是a所指向的数据(即*a)由于const的修饰而不可修改
后者声明(*const a),(*const a)是char类型的。a被一个解引用运算符和一个const关键词修饰,故a是个不可修改的指针,但是a所指向的数据(即*a)可以被修改
char const *a
和const char *a
是同一个意思,而如果既不允许a被修改,也不允许a所指向的数据被修改,那么需要声明为const char * const a
没有区别。