放在函数后面的const是什么意思 一个函数名后面加const表示什么意思??

c++\u3000\u5728\u51fd\u6570\u540e\u52a0const\u662f\u4ec0\u4e48\u610f\u601d\uff1f

const\u662f\u4e00\u4e2aC\u8bed\u8a00\u7684\u5173\u952e\u5b57\uff0c\u5b83\u9650\u5b9a\u4e00\u4e2a\u53d8\u91cf\u4e0d\u5141\u8bb8\u88ab\u6539\u53d8\u3002\u4f7f\u7528const\u5728\u4e00\u5b9a\u7a0b\u5ea6\u4e0a\u53ef\u4ee5\u63d0\u9ad8\u7a0b\u5e8f\u7684\u5b89\u5168\u6027\u548c\u53ef\u9760\u6027\uff0c\u53e6\u5916\uff0c\u5728\u89c2\u770b\u522b\u4eba\u4ee3\u7801\u7684\u65f6\u5019\uff0c\u6e05\u6670\u7406\u89e3const\u6240\u8d77\u7684\u4f5c\u7528\uff0c\u5bf9\u7406\u89e3\u5bf9\u65b9\u7684\u7a0b\u5e8f\u4e5f\u6709\u4e00\u4e9b\u5e2e\u52a9\u3002

\u3000\u3000\u8fd9\u662f\u628a\u6574\u4e2a\u51fd\u6570\u4fee\u9970\u4e3aconst\uff0c\u610f\u601d\u662f\u201c\u51fd\u6570\u4f53\u5185\u4e0d\u80fd\u5bf9\u6210\u5458\u6570\u636e\u505a\u4efb\u4f55\u6539\u52a8\u201d\u3002\u5982\u679c\u4f60\u58f0\u660e\u8fd9\u4e2a\u7c7b\u7684\u4e00\u4e2aconst\u5b9e\u4f8b\uff0c\u90a3\u4e48\u5b83\u5c31\u53ea\u80fd\u8c03\u7528\u6709const\u4fee\u9970\u7684\u51fd\u6570\u3002
\u3000\u3000\u5982\uff1a
class Text{ public: void printconst(void)const{cout<<"hello"<<endl;} void print(void){cout<<"hello"<<endl;} private: int k; }; const Text a; //\u4e0a\u9762\u5b9a\u4e49\u4e86\u7c7bText\u7684\u4e00\u5e38\u91cf\u5bf9\u8c61 int main(void) { a.printconst(); //ok a.print(); //error //\u4e0a\u9762a.print()\u8c03\u7528\u662f\u975e\u6cd5\u7684 return 0; } const\u5bf9\u8c61\u53ea\u80fd\u8c03\u7528const\u6210\u5458\u51fd\u6570\u3002 const\u5bf9\u8c61\u7684\u503c\u4e0d\u80fd\u88ab\u4fee\u6539\uff0c\u5728const\u6210\u5458\u51fd\u6570\u4e2d\u4fee\u6539const\u5bf9\u8c61\u6570\u636e\u6210\u5458\u7684\u503c\u662f\u8bed\u6cd5\u9519\u8bef \u3002 \u5728const\u51fd\u6570\u4e2d\u8c03\u7528\u975econst\u6210\u5458\u51fd\u6570\u662f\u8bed\u6cd5\u9519\u8bef

  1. const就是说这个函数操作不会对变量或是对象之类的值有影响 比如你有一个human类 你现在要得到某个human类对象A的age 那么肯定是不会因为你想得到这个值而改变了age的大小 对吧 那么你就可以写一个函数int getAge()const这样就好 这么做是为了防止你在函数中对不应该在这里改变的量不小心进行了改变。这样的函数叫常成员函数。常成员函数可以理解为是一个“只读”函数,它既不能更改数据成员的值,也不能调用那些能引起数据成员值变化的成员函数,只能调用const成员函数。

  2. const修饰说明它是一个常量,它的值是不能被修改的。没有什么地方是必须要用的,你只要觉得这个数字你不会改变就可以用。一般在函数传递参数中用的比较多,你可以看看C语言的库函数参数中很多都是用const修饰的。
    比如字符串拷贝的声明函数char *strcpy(char *dest,const char *src); 后边的形参用了const修饰,在函数定义中src的值就不能被改变,dest的值就可以被改变,也是一种提示的作用说明字符串是从src拷贝到dest中



将一个成员函数声明为const,表明这个成员函数不会修改对象的数据成员,能保证对象的常量性。
声明const成员函数的语法形式是:
返回类型 成员函数名称(参数表) const{}
例如:int fun(int a) const{return a;}

(1)可以定义 const 常量
(2)const 可以修饰函数的参数、返回值.

详细内容:
1、什么是const?
常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。(当然,我们可以偷梁换柱进行更新:)

2、为什么引入const?
const 推出的初始目的,正是为了取代预编译指令,消除它的缺点,同时继承它的优点。

3、cons有什么主要的作用?
(1)可以定义const常量,具有不可变性。 例如:
const int Max=100; int Array[Max];
(2)便于进行类型检查,使编译器对处理内容有更多了解,消除了一些隐患。例如: void f(const int i) { .........} 编译器就会知道i是一个常量,不允许修改; (3)可以避免意义模糊的数字出现,同样可以很方便地进行参数的调整和修改。 同宏定义一样,可以做到不变则已,一变都变!如(1)中,如果想修改Max的内容,只需要:const int Max=you want;即可!
(4)可以保护被修饰的东西,防止意外的修改,增强程序的健壮性。 还是上面的例子,如果在函数体内修改了i,编译器就会报错; 例如:
void f(const int i) { i=10;//error! }
(5) 为函数重载提供了一个参考。
class A { ......
void f(int i) {......} //一个函数
void f(int i) const {......} //上一个函数的重载 ......
};
(6) 可以节省空间,避免不必要的内存分配。 例如:
#define PI 3.14159 //常量宏
const doulbe Pi=3.14159; //此时并未将Pi放入ROM中 ......
double i=Pi; //此时为Pi分配内存,以后不再分配!
double I=PI; //编译期间进行宏替换,分配内存
double j=Pi; //没有内存分配
double J=PI; //再进行宏替换,又一次分配内存!
const定义常量从汇编的角度来看,只是给出了对应的内存地址,而不是象#define一样给出的是立即数,所以,const定义的常量在程序运行过程中只有一份拷贝,而#define定义的常量在内存中有若干个拷贝。
(7) 提高了效率。 编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高。

4、如何使用const?
(1)修饰一般常量 一般常量是指简单类型的常量。这种常量在定义时,修饰符const可以用在类型说明符前,也可以用在类型说明符后。 例如:
int const x=2; 或 const int x=2;
(2)修饰常数组 定义或说明一个常数组可采用如下格式:
int const a[5]={1, 2, 3, 4, 5};
const int a[5]={1, 2, 3, 4, 5};
(3)修饰常对象 常对象是指对象常量,定义格式如下:
class A; const A a;
A const a; 定义常对象时,同样要进行初始化,并且该对象不能再被更新,修饰符const可以放在类名后面,也可以放在类名前面。
(4)修饰常指针
const int *A; //const修饰指向的对象,A可变,A指向的对象不可变
int const *A; //const修饰指向的对象,A可变,A指向的对象不可变
int *const A; //const修饰指针A, A不可变,A指向的对象可变
const int *const A;//指针A和A指向的对象都不可变
(5)修饰常引用 使用const修饰符也可以说明引用,被说明的引用为常引用,该引用所引用的对象不能被更新。其定义格式如下:
const double & v;
(6)修饰函数的常参数 const修饰符也可以修饰函数的传递参数,格式如下:
void Fun(const int Var); 告诉编译器Var在函数体中的无法改变,从而防止了使用者的一些无意的或错误的修改。
(7)修饰函数的返回值: const修饰符也可以修饰函数的返回值,是返回值不可被改变,格式如下:
const int Fun1(); const MyClass Fun2();
(8)修饰类的成员函数: const修饰符也可以修饰类的成员函数,格式如下:
class ClassName {
public:
int Fun() const; .....
}; 这样,在调用函数Fun时就不能修改类里面的数据
(9)在另一连接文件中引用const常量
extern const int i;//正确的引用
extern const int j=10;//错误!常量不可以被再次赋值 另外,还要注意,常量必须初始化! 例如: const int i=5;

5、几点值得讨论的地方:
(1)const究竟意味着什么?
说了这么多,你认为const意味着什么?一种修饰符?接口抽象?一种新类型? 也许都是,在Stroustup最初引入这个关键字时,只是为对象放入ROM做出了一种可能,对于const对象,C++既允许对其进行静态初始化,也允许对他进行动态初始化。理想的const对象应该在其构造函数完成之前都是可写的,在析够函数执行开始后也都是可写的,换句话说,const对象具有从构造函数完成到析够函数执行之前的不变性,如果违反了这条规则,结果都是未定义的!虽然我们把const放入ROM中,但这并不能够保证const的任何形式的堕落,我们后面会给出具体的办法。无论const对象被放入ROM中,还是通过存储保护机制加以保护,都只能保证,对于用户而言这个对象没有改变。换句话说,废料收集器(我们以后会详细讨论,这就一笔带过)或数据库系统对一个const的修改怎没有任何问题。
(2)位元const V.S. 抽象const?
对于关键字const的解释有好几种方式,最常见的就是位元const 和 抽象const。下面我们看一个例子: class A { public: ...... A f(const A& a); ...... }; 如果采用抽象const进行解释,那就是f函数不会去改变所引用对象的抽象值,如果采用位元const进行解释,那就成了f函数不会去改变所引用对象的任何位元。 我们可以看到位元解释正是c++对const问题的定义,const成员函数不被允许修改它所在对象的任何一个数据成员。 为什么这样呢?因为使用位元const有2个好处: 最大的好处是可以很容易地检测到违反位元const规定的事件:编译器只用去寻找有没有对数据成员的赋值就可以了。另外,如果我们采用了位元const,那么,对于一些比较简单的const对象,我们就可以把它安全的放入ROM中,对于一些程序而言,这无疑是一个很重要的优化方式。(关于优化处理,我们到时候专门进行讨论) 当然,位元const也有缺点,要不然,抽象const也就没有产生的必要了。 首先,位元const的抽象性比抽象const的级别更低!实际上,大家都知道,一个库接口的抽象性级别越低,使用这个库就越困难。 其次,使用位元const的库接口会暴露库的一些实现细节,而这往往会带来一些负面效应。所以,在库接口和程序实现细节上,我们都应该采用抽象const。 有时,我们可能希望对const做出一些其它的解释,那么,就要注意了,目前,大多数对const的解释都是类型不安全的,这里我们就不举例子了,你可以自己考虑一下,总之,我们尽量避免对const的重新解释。
(3)放在类内部的常量有什么限制?
看看下面这个例子:
class A {
private:
const int c3 = 7; // ???
static int c4 = 7; // ???
static const float c5 = 7; // ??? ......
};
你认为上面的3句对吗?呵呵,都不对!使用这种类内部的初始化语法的时候,常量必须是被一个常量表达式初始化的整型或枚举类型,而且必须是static和const形式。这显然是一个很严重的限制! 那么,我们的标准委员会为什么做这样的规定呢?一般来说,类在一个头文件中被声明,而头文件被包含到许多互相调用的单元去。但是,为了避免复杂的编译器规则,C++要求每一个对象只有一个单独的定义。如果C++允许在类内部定义一个和对象一样占据内存的实体的话,这种规则就被破坏了。
(4)如何初始化类内部的常量?
一种方法就是static 和 const 并用,在内部初始化,如上面的例子; 另一个很常见的方法就是初始化列表:
class A {
public:
A(int i=0):test(i) {}
private:
const int i;
}; 还有一种方式就是在外部初始化,例如:
class A {
public:
A() {}
private:
static const int i;//注意必须是静态的!
};
const int A::i=3;
(5)常量与数组的组合有什么特殊吗? 我们给出下面的代码:
const int size[3]={10,20,50};
int array[size[2]];
有什么问题吗?对了,编译通不过!为什么呢?
Const可以用于集合,但编译器不能把一个集合存放在它的符号表里,所以必须分配内存。在这种情况下,const意味着“不能改变的一块存储”。然而,其值在编译时不能被使用,因为编译器在编译时不需要知道存储的内容。自然,作为数组的大小就不行了:) 你再看看下面的例子:
class A {
public:
A(int i=0):test[2]({1,2}) {}//你认为行吗?
private:
const int test[2];
};
vc6下编译通不过,为什么呢? 关于这个问题,前些时间,njboy问我是怎么回事?我反问他:“你认为呢?”他想了想,给出了一下解释,大家可以看看:我们知道编译器堆初始化列表的操作是在构造函数之内,显式调用可用代码之前,初始化的次序依据数据声明的次序。初始化时机应该没有什么问题,那么就只有是编译器对数组做了什么手脚!其实做什么手脚,我也不知道,我只好对他进行猜测:编译器搜索到test发现是一个非静态的数组,于是,为他分配内存空间,这里需要注意了,它应该是一下分配完,并非先分配test[0],然后利用初始化列表初始化,再分配test[1],这就导致数组的初始化实际上是赋值!然而,常量不允许赋值,所以无法通过。 呵呵,看了这一段冠冕堂皇的话,真让我笑死了!njboy别怪我揭你短呀:)我对此的解释是这样的:C++标准有一个规定,不允许无序对象在类内部初始化,数组显然是一个无序的,所以这样的初始化是错误的!对于他,只能在类的外部进行初始化,如果想让它通过,只需要声明为静态的,然后初始化。 这里我们看到,常量与数组的组合没有什么特殊!一切都是数组惹的祸!
(6)this指针是不是const类型的?
this指针是一个很重要的概念,那该如何理解她呢?也许这个话题太大了,那我们缩小一些:this指针是个什么类型的?这要看具体情况:如果在非const成员函数中,this指针只是一个类类型的;如果在const成员函数中,this指针是一个const类类型的;如果在volatile成员函数中,this指针就是一个volatile类类型的。
(7)const到底是不是一个重载的参考对象?
先看一下下面的例子:
class A {
......
void f(int i) {......}//一个函数
void f(int i) const {......}//上一个函数的重载
......
}; 上面是重载是没有问题的了,那么下面的呢?
class A {
......
void f(int i) {......}//一个函数
void f(const int i) {......}//?????
......
}; 这个是错误的,编译通不过。那么是不是说明内部参数的const不予重载呢?再看下面的例子:
class A {
......
void f(int& ) {......}//一个函数
void f(const int& ) {......}//?????
......
}; 这个程序是正确的,看来上面的结论是错误的。为什么会这样呢?这要涉及到接口的透明度问题。按值传递时,对用户而言,这是透明的,用户不知道函数对形参做了什么手脚,在这种情况下进行重载是没有意义的,所以规定不能重载!当指针或引用被引入时,用户就会对函数的操作有了一定的了解,不再是透明的了,这时重载是有意义的,所以规定可以重载。
(8)什么情况下为const分配内存?
以下是我想到的可能情况,当然,有的编译器进行了优化,可能不分配内存。
A、作为非静态的类成员时;
B、用于集合时;
C、被取地址时;
D、在main函数体内部通过函数来获得值时;
E、const的 class或struct有用户定义的构造函数、析构函数或基类时;。
F、当const的长度比计算机字长还长时;
G、参数中的const;
H、使用了extern时。 不知道还有没有其他情况,欢迎高手指点:)
(9)临时变量到底是不是常量?
很多情况下,编译器必须建立临时对象。像其他任何对象一样,它们需要存储空间而且必须被构造和删除。区别是我们从来看不到编译器负责决定它们的去留以及它们存在的细节。对于C++标准草案而言:临时对象自动地成为常量。因为我们通常接触不到临时对象,不能使用与之相关的信息,所以告诉临时对象做一些改变有可能会出错。当然,这与编译器有关,例如:vc6、vc7都对此作了扩展,所以,用临时对象做左值,编译器并没有报错。
(10)与static搭配会不会有问题? 假设有一个类:
class A {
public:
......
static void f() const { ......}
......
}; 我们发现编译器会报错,因为在这种情况下static不能够与const共存! 为什么呢?因为static没有this指针,但是const修饰this指针,所以...
(11)如何修改常量?
有时候我们却不得不对类内的数据进行修改,但是我们的接口却被声明了const,那该怎么处理呢?我对这个问题的看法如下:
1)标准用法:
mutable class A {
public:
A(int i=0):test(i) { }
void SetValue(int i)const { test=i; }
private: mutable int test;//这里处理!
};
2)强制转换:
const_cast class A {
public:
A(int i=0):test(i) { }
void SetValue(int i)const {
const_cast (test)=i;
}//这里处理!
private:
int test;
};
3)灵活的指针:
int* class A {
public:
A(int i=0):test(i) { }
void SetValue(int i)const { *test=i; }
private:
int* test; //这里处理!
};
4)未定义的处理
class A {
public:
A(int i=0):test(i) { }
void SetValue(int i)const {
int *p=(int*)&test; *p=i;
}//这里处理!
private:
int test;
}; 注意,这里虽然说可以这样修改,但结果是未定义的,避免使用!
5)内部处理:this指针
class A {
public:
A(int i=0):test(i) { }
void SetValue(int i)const {
((A*)this)->test=i;
}//这里处理!
private:
int test;
};
6)最另类的处理:空间布局
class A {
public:
A(int i=0):test(i),c('a') { }
private:
char c;
const int test;
};
int main()
{
A a(3);
A* pa=&a;
char* p=(char*)pa;
int* pi=(int*)(p+4);//利用边缘调整
*pi=5;//此处改变了test的值!
return 0;
}
虽然我给出了6中方法,但是我只是想说明如何更改,但出了第一种用法之外,另外5种用法,我们并不提倡,不要因为我这么写了,你就这么用,否则,我真是要误人子弟了:)
(12)最后我们来讨论一下常量对象的动态创建。 既然编译器可以动态初始化常量,就自然可以动态创建,例如:
const int* pi=new const int(10); 这里要注意2点:
1)const对象必须被初始化!所以(10)是不能够少的。
2)new返回的指针必须是const类型的。 那么我们可不可以动态创建一个数组呢? 答案是否定的,因为new内置类型的数组,不能被初始化。 这里我们忽视了数组是类类型的,同样对于类内部数组初始化我们也做出了这样的忽视,因为这涉及到数组的问题,我们以后再讨论。
来源:http://zhidao.baidu.com/question/91670015.html?si=3

  • c++,杩欎釜鎴愬憳鍑芥暟鍚庨潰鍔const鏄粈涔鎰忔?
    绛旓細const鎴愬憳鍑芥暟琛ㄧず璇ュ嚱鏁颁笉浼氫慨鏀逛换浣曠被鎴愬憳鍙橀噺鐨勫笺
  • C++涓const鍦ㄥ嚱鏁鍚嶅墠闈㈠拰鍑芥暟鍚庨潰鐨鍖哄埆
    绛旓細鍦ㄥ嚱鏁鍚嶅墠闈紝浣嗘槸瀵硅繑鍥炲肩殑淇グ灏辫鐪嬩綘鐨勯渶姹備簡锛const鍦ㄥ墠闈㈠拰鍚庨潰琛ㄧず鐨鎰忎箟涓嶄竴鏍 a.const int fun1() //杩欎釜鍏跺疄鏃犳剰涔夛紝鍥犱负鍙傛暟杩斿洖鏈韩灏辨槸璧嬪笺俠. const int * fun2() //璋冪敤鏃禼onst int *pValue = fun2();//鎴戜滑鍙互鎶奻un2()鐪嬩綔鎴愪竴涓彉閲忥紝鍗虫寚閽堝唴瀹逛笉鍙彉銆俢.int* ...
  • const鏀惧湪涓涓鍑芥暟鐨鏈熬浠涔鎰忔濆晩??
    绛旓細a.getName(); // 閿欒锛宎鏃㈢劧鏄父閲忥紝閭d箞瀹冨彧鑳借皟鐢ㄥ父閲忔柟娉曘傚惁鍒欐柟娉曢噷淇敼a閲岀殑鍐呭浜嗭紝鎬庝箞鑳戒綋鐜癮鏄父閲忓憿锛熸墍浠etName()鍚鍔const銆傛敞锛氬姞浜哻onst锛実etName鏂规硶鍐呬笉鑳藉浠讳綍鎴愬憳鍙橀噺鍋氳祴鍊兼搷浣溿傚惁鍒欑紪璇戝嚭閿欍傚鏋滀竴瀹氳鏀瑰憿锛堜竴瀹氳鏀逛负浠涔杩樿瀹氫箟const锛熸湁鏃跺欎粠璇箟涓婂父閲忔柟娉曚慨鏀规垚鍛...
  • 绾櫄鍑芥暟浣滄娊璞$被,鍚庨潰鍔犱笂涓涓const鏈浠涔浣滅敤,鏈涜В绛旂殑璇︾粏涓鐐
    绛旓細const鍏抽敭瀛楃敤鍦ㄥ嚱鏁涓婏紝璇存槑杩欎釜鍑芥暟涓嶈兘淇敼绫荤殑鎴愬憳鍙橀噺銆傝繖涓敤娉曚竴鑸锛歝lass BaseGraph 锝 public:virtual int GetArea() const =0;锝 class DerivedGraph :BaseGraph { ...} 鍦ㄨ繖閲岋紝GetArea()鍙湁鍦ㄥ悇涓淳鐢熺被鎵嶆湁鏁(鍩虹被鍏跺疄灏辨槸瀹氫箟涓涓帴鍙e嚱鏁),鑰岃繖涓鍑芥暟鍚庨潰鍔燾onst闄愬畾闄愬畾杩欎釜鍑芥暟鏄...
  • Point getCircum() const 閲鐨刢onst鍔鍦ㄥ嚱鏁板悗闈㈡槸浠涔浣滅敤?
    绛旓細绫荤殑鎴愬憳鍑芥暟鍚庨潰鍔 const锛岃〃鏄庤繖涓嚱鏁颁笉浼氬杩欎釜绫诲璞$殑鏁版嵁鎴愬憳锛堝噯纭湴璇存槸闈為潤鎬佹暟鎹垚鍛橈級浣滀换浣曟敼鍙樸傚湪璁捐绫荤殑鏃跺欙紝涓涓師鍒欏氨鏄浜庝笉鏀瑰彉鏁版嵁鎴愬憳鐨勬垚鍛樺嚱鏁伴兘瑕鍦鍚庨潰鍔 const锛岃屽浜庢敼鍙樻暟鎹垚鍛樼殑鎴愬憳鍑芥暟涓嶈兘鍔 const銆傛墍浠 const 鍏抽敭瀛楀鎴愬憳鍑芥暟鐨勮涓轰綔浜嗘洿鍔犳槑纭殑闄愬畾锛氭湁 const...
  • c++涓瑿onst 鐢ㄦ硶?浠涔鏃跺欓渶瑕佺敤const? Const鏀惧湪绫绘垚鍛鍑芥暟鍚鏈...
    绛旓細2銆佸弬鏁颁娇鐢const淇グ锛岃繖绉嶇敤娉曟槸琛ㄦ槑骞堕槻姝㈠嚱鏁板唴閮ㄤ慨鏀逛簡鍏ュ弬锛屼竴鑸敤鍦寮曠敤鍙傛暟鍜屾寚閽堝弬鏁般傝皟鐢ㄨ呬笉鐢ㄦ媴蹇冨叆鍙傝淇敼锛屽嚱鏁板疄鐜拌呬篃鏃犳硶淇敼璇ュ叆鍙傘3銆佹垚鍛鍑芥暟鍚庨潰浣跨敤const淇グ锛岃繖绉嶇敤娉曡〃鏄庡苟闃叉鍑芥暟鍐呴儴淇敼鎴愬憳鍙橀噺锛屽嵆纭繚璇ュ嚱鏁颁笉浼氫慨鏀瑰唴閮ㄦ暟鎹垚鍛橈紝浠呬綔涓洪潪鏁版嵁鐩稿叧鐨勬柟娉曘4銆佸嚱鏁拌繑鍥炲...
  • void show()const;鍚庨潰鐨刢onst鏄骞浠涔鐨?
    绛旓細瀹冭鏄巗how()鏄竴涓父閲忔垚鍛樺嚱鏁般傛敞鎰弒how()蹇呴』鏄竴涓被鐨勬垚鍛樺嚱鏁帮紝鍚庨潰鎵嶅彲浠ュ姞涓婁釜const锛涜〃绀哄畠鏄父閲忔垚鍛樺嚱鏁般傚畠琛ㄧずconst鎴愬憳鍑芥暟涓嶈兘淇敼璋冪敤璇鍑芥暟鐨瀵硅薄銆備緥濡傦細include <iostream> using namespace std;class A { public:void show()const { a=1;cout<<a<<endl;} private:int a;};...
  • C++涓被鐨勬湁浜涙垚鍛鍑芥暟澹版槑鏃朵负浠涔堝湪鍚庨潰鍔犱笂const
    绛旓細绫荤殑鎴愬憳鍑芥暟澹版槑鐨鍚庨潰鍔犱簡const锛屾槸琛ㄧず鍦杩欎釜鎴愬憳鍑芥暟閲屼笉浼氫慨鏀圭被鐨勬垚鍛樺彉閲忕殑鍊笺傝繕鏈夛紝const鍑芥暟閲岄潰搴旇鍙兘璋冪敤鏈被鐨刢onst鍑芥暟锛堝彲浠ユ兂鍑轰负浠涔鐨勶級銆傝绫荤殑const鐨勫璞★紝鍙兘璋冪敤瀹冪殑const鍑芥暟锛堜篃鍙互鎯虫槑鐧戒负浠涔堢殑锛夈
  • 鍑芥暟閲鐨 con 鏄粈涔鎰忔?
    绛旓細鍑芥暟鍚庨潰鍔const鏄琛ㄦ槑杩欎釜鍑芥暟涓嶄細鏇存敼class鐨勭姸鎬侊紝鍗砪lass鍐呭悇鎴愬憳鍙橀噺鐨勫笺傜紪璇戝櫒濡傛灉鍙戠幇鏌愪釜const鍑芥暟閲屾敼鍙樹簡鎴愬憳鍙橀噺鐨勫间細鎶ラ敊銆傛瘮濡備笅闈㈣繖涓緥瀛愩俿truct A { int i;void set(int v) {i = v;} //涓嶈兘鍔燾onst锛屽洜涓篿鍊兼敼鍙樹簡銆俰nt value() const {return i;} //姝g‘锛宨鍊兼病鏈夋敼鍙...
  • 鍦C++涓,鍑芥暟鍚嶅墠鐨刢onst鍜鍑芥暟鍚嶅悗鐨刢onst鏈夊尯鍒悧?
    绛旓細int const func();琛ㄧず璇ユ垚鍛樺嚱鏁扮殑闅愯棌this鎸囬拡鍙傛暟鏄疉 const绫诲瀷鐨勶紱鑰宨nt func()const;琛ㄧず璇ラ噸杞芥垚鍛樺嚱鏁扮殑闅愯棌this鎸囬拡鍙傛暟鏄疉 const const绫诲瀷鐨.A const绫诲瀷鍜孉 const const绫诲瀷鏄笉鍚岀被鍨嬶紝鍥犳鍙互閲嶈浇銆傜敱姝ゅ彲瑙const鏀惧湪鍑芥暟鍚嶅悗鍜屽悕鍓嶆槸涓嶅悓鐨 ...
  • 扩展阅读:c++ const用法 ... 高数const什么意思 ... 成员函数后面加const ... 数学里const是什么函数 ... 函数声明后面的const ... 函数结尾加const ... 函数名后面的const ... cost未来函数能用吗 ... const放在函数前后的区别 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网