nst

阅读 / 问答 / 标签

institution是什么意思

institution英 [u02ccu026anstu026au02c8tju:u0283n] 美 [u02ccu026anstu026au02c8tu:u0283n] n.(大学、银行等规模大的) 机构; 惯例,制度,规定,建立; 社会事业机构; < 口>名人,名物; 全部释义>> [例句]Students from one institution may take courses at the others.来自其中一个机构的学生可以参加另外两个机构的课程

为什么institution改为了university

1、Institution是泛称的教育机构,包括University、College、School、Institute等。2、美国早期的高等教育学校沿袭英国而称为College,19世纪后期,私立的College开设研究所后多改名为University。3、大型的机构,银行,金融,教育机构更倾向于代词机构。

英语发票 institution是填什么

机构,也就是工作单位

institution 意思里有包括"公司"吗

可以单独做公司在商务英语范畴内。

institution+name是什么意思

institution+name机构名称.很高兴为你解答!如有不懂,请追问。 谢谢!

selective institution是什么意思

selective institution选择性的制度selective[英][su026au02c8lektu026av][美][su026au02c8lu025bktu026av]adj.精心选择的; 选择的,不普遍的; 淘汰的; institution[英][u02ccu026anstu026au02c8tju:u0283n][美][u02ccu026anstu026au02c8tu:u0283n]n.(大学、银行等规模大的)机构; 惯例,制度,规定,建立; 社会事业机构; <口>名人,名物; 复数:institutions例句:1.Students from one institution may take courses at the others. 来自其中一个机构的学生可以参加另外两个机构的课程。

Institution ,Department是什么意思?

n. 机构,惯例,创立 Institution: 2. 学会,协会,机构 Institute 研究所,学院,协会 Institution 学会,协会,机构 3. 机关,机构,学校,制度 institute 学会,协会,研究所 institution 机关,机构,学校,制度 insect 昆虫 institution 机构 instrument 工具 department [di"pɑ:tm�0�5nt] n. 部,部门,系 Department: 1. 部门想获取用户的职务 (Title)、部门 (Department) 以及他们的姓、名和电话号码?只需将这些属性添加到 SELECT 语句中即可(顺序并不重要,可以按照想要的顺序放置它们): 2. (系):学校、学院或大学中根据专业学科划分的行政分支(如英语系、历史系)。 Degree(学位):学院、大学或专业研究生院(professional school)授给完成规定学习课程学生的文凭或学衔。 Department(系):学校、学院或大学中根据专业学科划分的行政分支(如英语系、历史系)。 data 资料department 部分 4. 部门,司,局 denationalization process 非国有化过程

institution可数吗?

institution是可数名词。 institution: n.(大学、银行等规模大的)机构;慈善机构;社会福利机构;(由来已久的)风俗习惯,制度; 复数: institutions. 扩展资料   I believe in the institution of marriage.   我相信婚姻制度。   The woman will be confined to a mental institution   这个女人将被关进精神病院。   This degree programme is fully accredited by the Institution of Electrical Engineers.   这门学位课程经电气工程师学院鉴定完全合格。   There was never an official institution of censorship in Albania.   在阿尔巴尼亚从未设立过官方审查制度。   He was transferred to Shoal Creek Mental Institution for an indefinite period   他被转到了肖尔溪精神病院,要在那里无限期地呆下去。

institution的中文意思

制度宪法

institutions是什么意思

institutions 英 美 [,u026anstu0259"tju028au0283u0259n] n. 体系网络释义 专业释义 英英释义专业:经济学|法学|文学|艺术学机构 -引用次数:3454Foreign financial institutions began to enter China largely since China joined the WTO in 2001.中国自2001年加入WTO后,外资金融机构便开始大量进入中国。5. The culture-institutions-policy model is significant.这也就是说,公共政策及其决定是制度变迁和文化变迁的一个变量。 第四部分即论文的第七章。参考来源 - 广义发展论以上统计来源于2,447,534篇论文数据,部分数据来源于: NoteExpress柯林斯英汉双解大词典 21世纪大英汉词典institution /u02ccu026anstu026au02c8tjuu02d0u0283u0259n/ CET4 TEM41.N-COUNT/N-IN-NAMES An institution is a large important organization such as a university, church, or bank. 机构

为什么要用const

习惯问题……用const修饰,那么在你的函数体里就不可以对其进行更改,否则报错!这是为了使有些指针要想被其它函数调用,但又不希望由于失误被其它函数意外更改而设置的。如果你本意就是要做指针的更改,那当然就别加const了。

c++中const是怎么使用的?

如果不希望函数调用的时候改变传入形参的值,就用const修饰,即上述的规范格式,否则形参别用const修饰。可参考如下链接:http://www.cppblog.com/yishanhante/articles/21322.html?opt=admin

总结C++中const的用法

推荐你去看高质量c/c++编程指南,里面详细的讲了。

关于const描述错误的

A,没有变量类型 D,没有初值

引用局部变量为什么要加const

const是一个C语言的关键字,它限定一个变量不允许被改变。使用const在一定程度上可以提高程序的安全性和可靠性。被const修饰的变量称为常类型变量。const的主要作用:(1)可以定义const常量,具有不可变性。 例如:const int Max=100; 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) 可以节省空间,避免不必要的内存分配。 例如: #define PI 3.14159 //常量宏 const double Pi=3.14159; //此时并未将Pi放入RAM中 ...... double i=Pi; //此时为Pi分配内存,以后不再分配! double I=PI; //编译期间进行宏替换,分配内存 double j=Pi; //没有内存分配 double J=PI; //再进行宏替换,又一次分配内存! const定义常量从汇编的角度来看,只是给出了对应的内存地址,而不是象#define一样给出的是立即数,所以,const定义的常量在程序运行过程中只有一份拷贝,而#define定义的常量在内存中有若干个拷贝。 (6) 提高了效率。 编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高。

c++中关于const的问题

1楼错误。 2楼是对的。函数后面加const,仅指这个函数本身,一般不会修改对象的成员。不过,并不是真正的无法做到,1。 可以强制转换this指针2。 可以把要改的成员标记为muable

关键字const含义,解释下面各语句意思?

constant 也就是常量的意思1.修饰变量如const int a =3;常量a的值不能再修改2.修饰指针如 const char*p = 123;p[0]="4"; 是错的, 字符串内容不允许改char *const p = "123";p ="456"; 是错误的, 指针不允许再指向其他地址3.常引用多用于参数, 防止参数被修改,引用是避免创建参数副本void test( const struct A &a){}4.常函数就是类的成员函数,参数后面加个const, 此函数中不允许修改类的数据成员void test() const {}

全局变量和const定义是什么?

全局变量的定义为本函数和其他函数所共用。const定义是指使用类型修饰符const说明的类型。一、全局变量全局变量是编程术语中的一种,源自于变量之分。变量分为局部与全局,局部变量又可称之为内部变量。变量由某对象或某个函数所创建的变量通常都是局部变量,只能被内部引用,而无法被其它对象或函数引用。全局变量既可以是某对象函数创建,也可以是在本程序任何地方创建。全局变量是可以被本程序所有对象或函数引用。二、CONST(C中的CONST)const是一个C语言(ANSI C)的关键字,具有着举足轻重的地位。const它限定一个变量不允许被改变,产生静态作用。使用const在一定程度上可以提高程序的安全性和可靠性。清晰理解const所起的作用,对理解对方的程序也有一定帮助。CONST在其它编程语言中也有出现,例如Pascal、C++、PHP5、B#.net、HC08 C、C#等。

const指针的用法

有两种形式:1.指向const的指针使用指针定义的技巧,正如任何复杂的定义一样,是在标识符的开始处读它并从里向外读。const指定那个“最靠近”的。这样,如果要使正指向的元素不发生改变,我们得写一个像这样的定义:constdouble*point;从标识符开始,是这样读的:“x是一个指针,它指向一个constint。”这里不需要初始化,因为说x可以指向任何东西(那是说,它不是一个const),但它所指的东西是不能被改变的。2.const指针使指针本身成为一个const指针,必须把const标明的部分放在*的右边,如:intd=1;int*constx=&d;现在它读成“x是一个指针,这个指针是指向int的const指针”。因为现在指针本身是const指针,编译器要求给它一个初始化值,这个值在指针寿命期间不变。然而要改变它所指向的值是可以的,可以写*x=2;也可以使用下面两种合法形式中的任何一种形式把一个const指针变为一个const对象:intd=1;constint*constx=&d;//(1)intconst*constx2=&d;//(2)现在,指针和对象都不能改变。一些人认为第二种形式更好。因为const总是放在被修改者的右边。但对于特定的代码类型来讲,程序员得自己决定哪一种形式更清楚。你的并没有错啊,要错也是在*号后加一个空格吧

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

表示常成员函数常对象只能调用常成员函数,常成员函数不允许修改类中数据成员(除加mutable修饰词例外);此常成员函数隐含一个常量this指针。

const英语单词怎么读

感觉没有这个单词kongsit ?????????

const int和int 的区别

const应该是read only吧学习

const int a; int const a; const int *a; int * const a; int const * a const; 之间的区别?

int intp_test1(const int* _intp){int tmp = 0;*_intp = 50; //编译器报error:assignment of read-only location ‘*intp1"_intp = &tmp; //正确。值不可以修改,但指针指向可以修改,不过有效期仅限于函数内。return 0;}int intp_test2(int const* _intp){int tmp = 0;*_intp = 50; //编译器报error:assignment of read-only location ‘*intp1"_intp = &tmp; //正确。值不可以修改,但指针指向可以修改,不过有效期仅限于函数内。return 0;}int intp_test3(int* const _intp){int tmp = 0;*_intp = 50; //正确。指针指向不可以修改,但值可以修改,而且函数返回依然有效。_intp = &tmp; //编译器报error:assignment of read-only location ‘*intp1"return 0;}int main(int argc, char* argv[]){int first = 50;int second = 60;const int* intp1 = &first; //正确。编译器甚至没有报warning,first的类型是const int才更严谨吧!int const* intp2 = &first; //正确。编译器甚至没有报warning,first的类型是const int才更严谨吧!int* const intp3 = &first;*intp1 = 80; //编译器报error:assignment of read-only location ‘*intp1"intp1 = &second; //正确*intp2 = 99; //编译器报error:assignment of read-only location ‘*intp1"intp2 = &second; //正确intp3 = &second; //编译器报error:assignment of read-only location ‘*intp1"*intp3 = 70; //正确intp_test1(intp1); //正确。形参和实参类型完全一致。intp_test1(intp2); //正确。形参和实参本质是一样的,只是写法不同。intp_test1(intp3); //正确。编译器选择了无视,我猜原因是:反正即便修改了指针指向,也只是在栈里,函数返回后一切复原,不会产生什么实质性破坏。intp_test2(intp1); //正确。形参和实参类型完全一致。intp_test2(intp2); //正确。形参和实参本质是一样的,只是写法不同。intp_test3(intp3); //正确。编译器选择了无视,我猜原因是:反正即便修改了指针指向,也只是在栈里,函数返回后一切复原,不会产生什么实质性破坏。intp_test3(intp1); //编译器报warning:passing argument 1 of ‘intp_test3" discards ‘const" qualifier from pointer target typeintp_test3(intp2); //编译器报warning:passing argument 1 of ‘intp_test3" discards ‘const" qualifier from pointer target typeintp_test3(intp3); //正确。形参和实参类型完全一致。return 0;}

为什么类里要有const函数,const函数在类里有什么作用?

有两种const函数,声明如下:1、const T func();2、T func() const;第一种表示返回的是const的类型,也即返回的值不能作为左值,楼主懂的。第二种表示该成员函数不能修改其成员变量的值,即该函数不能改变任何该类的非静态成员的值。

一个函数名后面加const表示什么意思

在成员函数中圆括号之后所带的关键字const表明,在该函数中不能改变类中的数据成员的值。带const的函数称为常量成员函数。下面就是个错误例子,说明const的作用:class a{int a;public:void disp() const{a=4};//a=4错误};

编程语言中const是什么意思,用来干什么的,怎么用(语法),适用于哪几种语言

说简单点,const就是定义一个常量,程序中值不能改变,常用于c或c++

计算机C语言中的关键字:const是什么意思?

const修饰数字的话就表示为常数const修改指针的话就表示指针指向的地址不可改变(地址中存的值可以变)

const含义

海洋——2008:“下面几个别看了 ,明显有错误!!!”回去找本书好好看看....

const 放在函数后表示什么意思

看const修饰函数的什么部分?

java中关键字const是什么意思?

定义一个变量为常量,在程序运行过程中不可改变

const {a} = b 是啥意思?

对象的结构赋值这里有详细的讲解。

C语言中const的威力有多大

const修饰的数据类型是指常类型,常类型的变量或对象的值是不能被更新的。const关键字的作用主要有以下几点:(1)可以定义const常量,具有不可变性。 例如: const int Max=100; int Array[Max]; (2)便于进行类型检查,使编译器对处理内容有更多了解,消除了一些隐患。例如: void f(const int i) { .........} 编译器就会知道i是一个常量,不允许修改; (3)可以避免意义模糊的数字出现,同样可以很方便地进行参数的调整和修改。(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常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高。

C++中的const的用法

如果const用于定义一个非指针的普通变量,就是定义了一个常变量,这个变量以后的值在生命期内是不能改变的,因此也必须对该变量进行初始化,在C++中要在类的初始化列表中初始化。如果const用于定义一个指针变量,不同的写法有不同的意思。例如const char *p和char* const p 前者表示p指向的内容是不能够改变的,后者是指p本身的值是不能够改变的。如果用于修饰函数返回值,效果和修饰变量一样。const修饰类的成员函数,则该成员函数不能修改类中任何非const成员函数。一般写在函数的最后来修饰。const修饰类对象表示该对象为常量对象,在对象的生命期中其中的任何成员都不能被修改。关于const用法还是比较复杂的,还有很多用法,我也没有总结详尽,以后遇到可以自己写程序测试。

c语言中const修饰的到底是常量还是变量?

这个文章很详细:1、 const修饰的变量是常量还是变量 对于这个问题,很多同学认为const修饰的变量是不能改变,结果就误认为该变量变成了常量。那么对于const修饰的变量该如何理解那?下面我们来看一个例子:int main { char buf[4]; const int a = 0; a = 10; } 这个比较容易理解,编译器直接报错,原因在于“a = 10;”这句话,对const修饰的变量,后面进行赋值操作。这好像说明了const修饰的变量是不能被修改的,那究竟是不是那,那么下面我们把这个例子修改下:int main { char buf[4]; const int a = 0; buf[4] = 97; printf(“the a is %d ”,a); }其中最后一句printf的目的是看下变量a的值是否改变,根据const的理解,如果const修饰的是变量是不能被修改的话,那么a的值一定不会改变,肯定还是0。但是在实际运行的结果中,我们发现a的值已经变为97了。这说明const修饰的变量a,已经被我们程序修改了。那综合这两个例子,我们来分析下,对于第二例子,修改的原因是buf[4]的赋值操作,我们知道buf[4]这个变量已经造成了buf这个数组变量的越界访问。buf数组的成员本身只有0,1,2,3,那么buf[4]访问的是谁那,根据局部变量的地址分配,可以知道buf[4]的地址和int a的地址是一样,那么buf[4]实际上就是访问了const int a;那么对buf[4]的修改,自然也修改了const int a的空间,这也是为什么我们在最后打印a的值的时候看到了97这个结果。那么我们现在可以知道了,const修饰的变量是不具备不允许修改的特性的,那么对于第一个例子的现象我们又如何解释那。第一个例子,错误是在程序编译的时候给出的,注意这里,这个时候并没有生成可执行文件,说明const修饰的变量可否修改是由编译器来帮我们保护了。而第二个例子里,变量的修改是在可执行程序执行的时候修改的,说明a还是一个变量。综上所述,我们可以得出一个结论,那就是const修饰的变量,其实质是告诉程序员或编译器该变量为只读,如果程序员在程序中显示的修改一个只读变量,编译器会毫不留情的给出一个error。而对于由于像数组溢出,隐式修改等程序不规范书写造成的运行过程中的修改,编译器是无能为力的,也说明const修饰的变量仍然是具备变量属性的。2、 被const修饰的变量,会被操作系统保护,防止修改 如果对于第一个问题,有了理解的话,那么这个问题,就非常容易知道答案了。Const修饰的变量是不会被操作系统保护的。其原因是操作系统只保护常量,而不会保护变量的读写。那么什么是常量?比如“hello world”这个字符串就是被称为字符串常量。对于这个问题的另一种证明方法,可以看下面这个程序:int main { const int a; char *buf = “hello world”; printf(“the &a is %p, the buf is %p ”,&a, buf); }可以发现buf保存的地址是在0x08048000这个地址附近的,而a的地址是在0xbf000000这个地址附近的,而0x08048000附近的地址在我们linux操作系统上是代码段。这也说明了常量和变量是存放在不同区域的,自然操作系统是会保护常量的。如果我们知道这个道理后,再看下面的题目:int main { char *buf = “hello”; buf[0] = ‘a"; printf(“the buf is %s ”,buf); }

const使用

const int a = 10;a在程序运行过程中,永远都等于10.

c语言中的const的区别?

一、区别如下:1、int定义的量是变量,它的值可以更改;而const int 定义的是一个常量,它的值不可以更改。2、int在定义的时候,不需要初始化,而const int 在定义的时候必须初始化;二、const的作用:把对象转换成一个常量拓展资料const与define。两者都可以用来定义常量,但是const定义时,定义了常量的类型,所以更精确一些。#define只是简单的文本替换,除了可以定义常量外,还可以用来定义一些简单的函数,有点类似内联函数(Inline)。const和define定义的常量可以放在头文件里面。参考资料:百度百科:CONST

const在函数后面是什么意思?

表示此函数为只读函数!

函数返回值为const是什么意思

const代表常数(constant)

const和static const的区别

这种问题到书中找答案

C语言中的const是神魔意思?

constant的缩写,就是常量的意思,不允许改变

const的作用是什么?

表示只读

变量声明 int const a; 和 conat int a;有什么意义上的区别?

好像没区别哦。都可以习惯写后者

电力系统分析中const是什么意思

电力系统分析中const,翻译是const是一个C语言的关键字,它限定一个变量不允许被改变,产生静态作用。使用const在一定程度上可以提高程序的安全性和可靠性。另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程序也有一些帮助。另外CONST在其他编程语言中也有出现,如C++、PHP5、C#.net、HC08 C。主要作用(1)可以定义const常量,具有不可变性。   例如:const int Max=100; 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) 可以节省空间,避免不必要的内存分配。 例如:   #define PI 3.14159 //常量宏   const double Pi=3.14159; //此时并未将Pi放入RAM中 ......   double i=Pi; //此时为Pi分配内存,以后不再分配!   double I=PI; //编译期间进行宏替换,分配内存   double j=Pi; //没有内存分配   double J=PI; //再进行宏替换,又一次分配内存!   const定义常量从汇编的角度来看,只是给出了对应的内存地址,而不是像#define一样给出的是立即数,所以,const定义的常量在程序运行过程中只有一份拷贝,而#define定义的常量在内存中有若干份拷贝。   (6) 提高了效率。   编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高。

ABB机器人const,pers,var的区别

vVAR Variable,变量。vCONST Constant,常量。vPERS Persistent,可变量。

函数名前加const是啥意思

是指该函数的返回值是“常量”,不可修改。通常这样的函数返回一个引用(&)或指针。比如:int& abc(...){...}int* xyz(...){...}以后可以这样使用这两个函数:abc(...)=100;*xyz(...)=200;若加上const之后,就限制这样的赋值。

C语言中const有什么用途

const修饰的数据类型是指常类型,常类型的变量或对象的值是不能被更新的。const关键字的作用主要有以下几点:(1)可以定义const常量,具有不可变性。 例如: const int Max=100; int Array[Max]; (2)便于进行类型检查,使编译器对处理内容有更多了解,消除了一些隐患。例如: void f(const int i) { .........} 编译器就会知道i是一个常量,不允许修改; (3)可以避免意义模糊的数字出现,同样可以很方便地进行参数的调整和修改。(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常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高。

const有什么用

(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

const和int的区别

const和int是C++中的两种变量类型。int是一种整型变量,可以存储整数值。而const则是一种常量,其值在程序执行过程中不能被改变。常量一般会在编译时进行初始化,不能被修改,而且常量一般会被存储在常量区。另外,const int a = 5; 与 int const a = 5; 意思是相同的。

static const和const static的区别

对于C/C++语言来讲,const就是只读的意思,只在声明中使用;static一般有2个作用,规定作用域和存储方式.对于局部变量,static规定其为静态存储方式,每次调用的初始值为上一次调用的值,调用结束后存储空间不释放;对于全局变量,如果以文件划分作用域的话,此变量只在当前文件可见;对于static函数也是在当前模块内函数可见.static const 应该就是上面两者的合集.下面分别说明:全局:const,只读的全局变量,其值不可修改.static,规定此全局变量只在当前模块(文件)中可见.static const,既是只读的,又是只在当前模块中可见的.文件:文件指针可当作一个变量来看,与上面所说类似.函数:const,返回只读变量的函数.static,规定此函数只在当前模块可见.类:const,一般不修饰类,(在VC6.0中试了一下,修饰类没啥作用)static,C++中似乎没有静态类这个说法,一般还是拿类当特殊的变量来看.C#中有静态类的详细说明,且用法与普通类大不相同.

全局变量和const定义是什么?

全局变量的定义为本函数和其他函数所共用。const定义是指使用类型修饰符const说明的类型。一、全局变量全局变量是编程术语中的一种,源自于变量之分。变量分为局部与全局,局部变量又可称之为内部变量。变量由某对象或某个函数所创建的变量通常都是局部变量,只能被内部引用,而无法被其它对象或函数引用。全局变量既可以是某对象函数创建,也可以是在本程序任何地方创建。全局变量是可以被本程序所有对象或函数引用。二、CONST(C中的CONST)const是一个C语言(ANSI C)的关键字,具有着举足轻重的地位。const它限定一个变量不允许被改变,产生静态作用。使用const在一定程度上可以提高程序的安全性和可靠性。清晰理解const所起的作用,对理解对方的程序也有一定帮助。CONST在其它编程语言中也有出现,例如Pascal、C++、PHP5、B#.net、HC08 C、C#等。

大学物理v=const指什么?

大学物理中v=const通常指的是物体的速度为常数,即匀速直线运动。在匀速直线运动中,物体的速度大小和方向都保持不变,因此速度为常数。这与加速度为零有关,即物体受到的合外力为零,使其速度不发生变化。

C语言中 const可以直接修饰数据类型吗?

const不是C支持得,只能修饰变量,不能修饰类型

c语言中const 是什么意思?

  const是一个C语言的关键字,它限定一个变量不允许被改变。使用const在一定程度上可以提高程序的安全性和可靠性。另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程序也有一些帮助。另外CONST在其他编程语言中也有出现,如C++、PHP5、C#.net、HC08 C。  (1)可以定义const常量,具有不可变性。  例如:const int Max=100; 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! }

const和int有什么区别?

一、区别如下:1、int定义的量是变量,它的值可以更改;而const int 定义的是一个常量,它的值不可以更改。2、int在定义的时候,不需要初始化,而const int 在定义的时候必须初始化;二、const的作用:把对象转换成一个常量拓展资料const与define。两者都可以用来定义常量,但是const定义时,定义了常量的类型,所以更精确一些。#define只是简单的文本替换,除了可以定义常量外,还可以用来定义一些简单的函数,有点类似内联函数(Inline)。const和define定义的常量可以放在头文件里面。参考资料:百度百科:CONST

C语言函数返回值为 const 型 有什么意义

(1)可以定义const常量(2)const可以修饰函数的参数、返回值.详细内容:1、什么是const?常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。(当然,我们可以偷梁换柱进行更新:)2、为什么引入const?const推出的初始目的,正是为了取代预编译指令,消除它的缺点,同时继承它的优点。3、cons有什么主要的作用?(1)可以定义const常量,具有不可变性。例如:constintMax=100;intArray[Max];

CONST的主要作用

(1)可以定义const常量,具有不可变性。   例如:const int Max=100; 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) 可以节省空间,避免不必要的内存分配。 例如:   #define PI 3.14159 //常量宏   const double Pi=3.14159; //此时并未将Pi放入RAM中 ......   double i=Pi; //此时为Pi分配内存,以后不再分配!   double I=PI; //编译期间进行宏替换,分配内存   double j=Pi; //没有内存分配   double J=PI; //再进行宏替换,又一次分配内存!   const定义常量从汇编的角度来看,只是给出了对应的内存地址,而不是像#define一样给出的是立即数,所以,const定义的常量在程序运行过程中只有一份拷贝,而#define定义的常量在内存中有若干份拷贝。   (6) 提高了效率。   编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高。

全局变量和const定义是什么

全局变量的定义为本函数和其他函数所共用。const定义是指使用类型修饰符const说明的类型。一、全局变量全局变量是编程术语中的一种,源自于变量之分。变量分为局部与全局,局部变量又可称之为内部变量。变量由某对象或某个函数所创建的变量通常都是局部变量,只能被内部引用,而无法被其它对象或函数引用。全局变量既可以是某对象函数创建,也可以是在本程序任何地方创建。全局变量是可以被本程序所有对象或函数引用。二、CONST(C中的CONST)const是一个C语言(ANSI C)的关键字,具有着举足轻重的地位。const它限定一个变量不允许被改变,产生静态作用。使用const在一定程度上可以提高程序的安全性和可靠性。清晰理解const所起的作用,对理解对方的程序也有一定帮助。CONST在其它编程语言中也有出现,例如Pascal、C++、PHP5、B#.net、HC08 C、C#等。

const和int有什么不同啊?

一、const int 和int 的区别具体的是 int定义的是一个变量,不需要初始化const int定义的是常量,需要初始化1、返回值const int & 是返回这个数值的一个常量的引用。而int 是返回这个数值的一个拷贝。int 是进行拷贝构造,而const int & 是返回的引用。拷贝构造更消耗时间,与此同时还用析构函数。因为产生了一个拷贝,你就可以轻易地修改拷贝的内容。2、取指针const int类型一旦定义以后就不能修改,int类型是随时可以修改的。在取指针方面,const有略复杂的东西,但是常规的、合理的操作不应该涉及到,因为const int是用来保存一些全局常量的,这些常量在编译期可以改,在运行期不能改。听起来这像宏,其实这确实就是用来取代宏的: #define PI 3.14 const float Pi = 3.14; 如果你的代码里用到了100次PI(宏),你的代码中会保存100个3.14这个常数。鉴于使用常数进行运算的机器代码很多时候会比使用变量来的长,如果你换用100次Pi(const float),程序编译后的机器码里就不需要出现100次常量3.14,只要在需要的时候引用存有3.14的常量就行了。特别在复杂的运算里,3.14这个常量(其实是无法修改的变量)会被一直装载在寄存器里带来一些性能提升。3、内容constint* p; //p可变,p指向的内容不可变,int const* p; //p可变,p指向的内容不可变。 int* const p; //p不可变,p指向的内容可变 const int* const p; //p和p指向的内容都不可变。二、const的作用:1、可以定义const常量,具有不可变性。例如:const int Max=100; 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! }

请问c 语言中的 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在pascal 中是常量说明。

C语言函数返回值为 const 型 有什么意义

当为指针时,有意义,一般数值没有意义当返回为const指针时,表示对返回指针所指向的数据内容不要进行修改。有修改则程序会报错!

VB中const的具体意思和功能!高手进!

Const是用来定义常量的相对于变量来说变量在程序的运行过程中是可以发生改变的而常量是不能发生改变的它是一个固定的值 不可以用来参加赋值上的计算 比如PI的值(即圆周率)

“const”是什么意思?

名词,有以下几种含义:常数,常量,结构,构造,康铜,铜镍合金,建筑,建筑物 。c语言中const 的含义及用法:const 表示常量,相当于宏定义,只能读取,不能修改。常变量:const 数据类型 符号常变量 = 数值,如:const float PI=3.14;指针常量:数据类型 *const 指针变量=变量名,如:char *const p="abc";const修饰的是指针变量,而不是指针的值,所以指针指向的值是可以修改的。常指针:const 数据类型 *指针变量=变量名或者是数据类型 const *指针变量=变量名,这是指针指向的值就是不可以改变的。还有一种情况就是指针变量本身不可以修改,指针指向的值也是不允许修改的,就是指针常量和常指针组合,这种称为常指针常量:const 数据类型 *const 指针变量=变量名或数据类型 const *const 指针变量=变量名

const 有什么用途?

const int n;n的值不可改

怎么用const

const 的使用const经常用来修饰一个值不能改变的量,安全,并且能消除存储操作const的几种用法:(1) 说明值常量(2) 说明指针(3) 说明函数参数及其返回值(4) 说明类的常量和成员函数(1)最简单const int x = 10;x在程序运行过程中,永远等于10.其他的你是看看我给的链接

如何定义const数据在 gconst段里

const 表示常量,相当于宏定义,只能读取,不能修改。常变量:const 数据类型 符号常变量 = 数值如:const float PI=3.14;指针常量:数据类型 *const 指针变量=变量名如:char *const p="abc";const修饰的是指针变量,而不是指针的值,所以指针指向的值是可以修改的。常指针:const 数据类型 *指针变量=变量名或者是数据类型 const *指针变量=变量名这是指针指向的值就是不可以改变的。还有一种情况就是指针变量本身不可以修改,指针指向的值也是不允许修改的,就是指针常量和常指针组合,这种称为常指针常量:const 数据类型 *const 指针变量=变量名或数据类型 const *const 指针变量=变量名

const在C语言中有哪些用法?

1、定义常量用const可以定义各种类型的常量例如:const int MAX = 100;const float MIN = 0;并且编译时会进行类型检查,这是其和#define的最大不同,当然它也没有#define定义宏的功能。2、用于防止向函数传递的参数被意外修改例如:int fun(const int *p1,const int *p2);这样定义这个函数,可以防止传递进来的指针所指向的内容被意外修改因为如果你进行了修改,编译时会报错

constexpr和const数组的区别?

const是表明这个值是constant的,但是不必在编译期确定,然而数组的大小是需要在编译期确定的,如:int i; // not constantconst int size = i; // fine!int arr[size]; // Error!然而对于constexpr,则表明这个值不仅是constant的,而且也是编译期确定的int i; // not constantconstexpr int size = i; // Error!于是,constexpr修饰的是可以用于数组大小的。而为什么在main的const是可以的呢?其实这跟const无关,而是使用了C99的一个特性,名叫variable length array(简称VLA),所以即使是这样:int main(){ int i; cin >> i; int arr[i];}你使用你现在的GCC编译,也是可以通过的那么,为什么VLA的数组不能在全局区呢?那么我想从两方面来解释:1. 标准文档在C11标准文档的 6.7.6.2 Array declarators2. If an identifier is declared as having a variably modified type, it shall be an ordinary identifier (as defined in 6.2.3), have no linkage, and have either block scope or function prototype scope. If an identifier is declared to be an object with static or thread storage duration, it shall not have a variable length array type.10. All declarations of variably modified (VM) types have to be at either block scope orfunction prototype scope. Array objects declared with the _Thread_local, static, or externstorage-class specifier cannot have a variable length array (VLA) type. However, an object declared with the static storage-class specifier can have a VM type (that is, a pointer to a VLA type). Finally, all identifiers declared with a VM type have to be ordinary identifiers and cannot, therefore, be members of structures or unions.2. 原理解释GCC实现VLA的方式,是allocate memory在stack上,所以,隐藏在VLA下面的是也发生了Memory Allocation的动作,所以你怎么能在全局区去进行Memory Allocation呢?最后,再补充一些constexpr的东西。这是一个C++11引入的东西,C++14对constexpr的范围进行了更大程度的条件放松,而这里我就仅谈C++11的。刚才谈到了constexpr是限定了修饰的为编译期间可确定的常量,但是constexpr也是可以用于函数的,而这个时候就不一定可以保证最后的值是constexpr了,那么我那次开C++11讲座的时候,介绍的一个小技巧,就是用数组检测是不是编译期的常量,这也是利用了数组大小需要编译期间确定的特点:constexpr int sz() { return 47;};constexpr size_t scale(size_t cnt){ return sz() * cnt;}const int i = 3;int arr[scale(i)]; // OKint j = 3;int arr[scale(j)]; //Error!

通达信公式中“CONST”是什么含义

通达信公式中“CONST” 意义为取值设为常数。CONST(C); 收盘价的最后一日取值设为常数以上为例,只显示最后一个数为值。公式中用到这个函数的地方不多。

C++返回值为Const &的看法大虾给解释下

既然LZ分有多,同一问题提2遍,那我也回答两遍吧。分一旦用来悬赏,系统可是不退的哦~~首先&的引用作用是C++独有的特性。其作用相当于传入参数时不经过拷贝,而是实实在在的传入。就像LZ的例子中的fun(int &a)。如果在函数内部修改了a的值,那就确实修改了a的值。而一般的参数传入方式都是传入一个参数的副本。函数内部的操作都是作用于副本。我对LZ的某些话有点难以理解,比如“普通变量形参在传递的过程 需要重新申请一个”我猜测LZ的意思其实就是普通变量形参在传递的过程 传递的其实是参数的拷贝。不过如果LZ既然已经知道这层意思,那么后面的疑问又从何而来。这不是显而易见的吗?所以我感觉LZ压根没把引用的作用弄明白,所以才在上面说了一大堆。对于返回值,也类似。一般返回值也是返回的拷贝值。所以如果将函数内的局部变量以引用方式返回是没有意义的。因为退出函数后,函数内部的局部变量已经被系统回收,所以这样引用方式传出的变量也是无效的。但是一般方式返回的变量反而是有效的。因为一般方式返回的是拷贝值,即使原版已经被销毁也无所谓。但是,有种情况是个例外。那就是对于生命周期足够长的变量,引用返回就是有效的。比如LZ例子里的int& fun(int &a){return a;},这里的a因为是引用方式传入,所以他的生命周期是大于函数本身的。所以引用方式传出也没有问题。当然其实这个例子一般不常见。真正常见的是下面的例子:class A{public:A():m_data(0){}int m_data;int &get() {return m_data;}}这里的m_data的生命周期和类A实例化后的变量一样长,所以显然是长于函数get的。所以引用返回是有效的。而且类似引用传入,少了拷贝的步骤,效率更高。当然本例中int本身不复杂,效率没啥区别。但若是一个相当复杂的结构体,那效率差别就大了。当然引用返回最大的作用就在下面:A a;a.get(a) += 1; //这样是合法的。这就是引用返回的最大作用。可以对返回值直接做这样的操作。专业点的话就是,可以直接当作左值。这可是相当有用的。完全看不出傻在哪里~~~说这样傻正说明LZ的不成熟吧。下面可以来个更具体的例子:struct B{B();int m_data[10];int& operator [] (int i){return m_data[i];}}void main(){B b;b[0] = 1;b[1] = 2; //怎么样,爽吧。}当然 若返回类型变为const &,就失去了左值的作用。但是省去拷贝,增加效率的作用还是在的

vb 中const用法

是常量的意思,而VB中的常量还有以下几种: 1)直接常量 指在程序中直接给出值的数据,如:123、123&、123.45、1.234E2 、123D3分别表示整型、长整型、单精度浮点型(小数形式)、单精度浮点型(指数形式)、双精度浮点型。 八进制常数: 在数值前加&O ,如 &O123 十六进制常数:在数值前加&H ,如&H123 2)用户声明的符号常量 用Const来声明: Const 符号常量名 [As 类型] = 表达式 如:Const PI=3.14159 "声明了常量PI,代表3.14159,单精度型 Const MAX As Integer=&O144 ""声明了常量MAX,代表八进制数144,整型 Const COUNT#=45.67 "声明了常量COUNT,代表45.67,双精度型 3)系统提供的常量 系统定义的常量位于对象库中,在对象浏览器中的Visual Basic(VB)和Visual Basic for Aplication(VBA)等对象库中列出了VB的常量。这些常量可以与应用程序的对象、方法、属性一起使用。 如:Form1.WindowsState=vbMaximized 表示将窗口极大化。

c++中const是怎么使用的

你好,首先你应当明白引用时C++区别于C的一点。但是在Lippleman的中曾经指出,引用的实现说到底还是采用指针实现的,但是它比指针有自己的优势。然后再Lippleman的中他指出现代C++程序偏向于使用引用,而不是指针,但是并不是说指针不再使用。C++中的const关键字是指出对象时一个常量,是不允许变动它在内存当中的值的。但是还有很多点是需要注意的。1.指向const对象的指针 const double *ptr表明ptr指向一个double类型的对象,你可以赋值给ptr一个常量或者不是常量。比如:double temp = 3.0;const double *ptr = &temp; //此时你不能通过ptr来更改temp的值,也就是说下面的语句是错误的:*ptr = 4.0;但是temp本身并不是const变量,下面的语句就是对的:temp = 4.0; //注意const对象一定要在对象的初始化时赋值.就是说下面的语句是错误的:double temp = 3.0;const double* ptr; ptr = &temp; //error2.const指针 ,和一般的const对象一样,说明指针本身是const,是不允许指向其他的对象的;比如下面的语句就是错的:double temp = 3.0;double* const ptr = &temp; double err = 4.0;ptr = &err; //注意const对象的初始化时一定需要赋值.但是你可以使用ptr来更改temp的值,就是说下面的语句是对的:*ptr = 10.0;对于你上面的例子中,首先你应该知道C++的标识符的命名本身就应该包含足够的信息,而不是随便的a,b,等没有用的名字。函数print()就是说该函数是用来打印的,并不会更改对象的内容,所以你将函数的形参设为const,是为了当你在函数的实现中一不小心更改了对象的内容,编译器会及时的报错,从而能避免以后不需要的麻烦。在标准的C中,函数形参的const说明是会被编译器直接忽略的就是说你写成const,但是你还是可以在函数的实现中更改对象的内容,但是你的const说明符告诉函数的使用者该专递给函数一个const对象,但是编译器并不负责对你的更改操作给出error提示的.在C++中,确实会给出提示的。所以当你的函数并不会改变对象的内容时,将其定义为const对象回事很好的编程习惯的。

c语言中const、static关键字的用法?

const是指常数,这种数存放在rom中,也就是硬盘里,只有使用的时候才读取到内存。static类型的是局部静态数据,首先他肯定是局部变量,但是他的生存期是全局的。const数不能被修改,也不能是局部变量。static一般用于局部变量,但是他可以被修改,并且退出引用他的函数体后变量依旧存在,直到下一次引用时数值不变化。

C++语言中,const后面可以不用加类型名(int 之类的)吗?

const &a 等价于 const int &a这两个没有区别,在变量声明中const int 的int可以省略,默认为int类型。注:其它类型不可省略。

c语言中const修饰的到底是常量还是变量?

C语言中const修饰的量是常变量,它与普通变量的编译方式一样,唯一的区别是常变量定义后不能做左值。C++中const修饰的才是常量。1、 const修饰的变量是常量还是变量对于这个问题,很多同学认为const修饰的变量是不能改变,结果就误认为该变量变成了常量。那么对于const修饰的变量该如何理解那?下面我们来看一个例子:int main{char buf[4];const int a = 0;a = 10;}这个比较容易理解,编译器直接报错,原因在于“a = 10;”这句话,对const修饰的变量,后面进行赋值操作。这好像说明了const修饰的变量是不能被修改的,那究竟是不是那,那么下面我们把这个例子修改下:int main{char buf[4];const int a = 0;buf[4] = 97;printf(“the a is %d ”,a);}其中最后一句printf的目的是看下变量a的值是否改变,根据const的理解,如果const修饰的是变量是不能被修改的话,那么a的值一定不会改变,肯定还是0。但是在实际运行的结果中,我们发现a的值已经变为97了。这说明const修饰的变量a,已经被我们程序修改了。那综合这两个例子,我们来分析下,对于第二例子,修改的原因是buf[4]的赋值操作,我们知道buf[4]这个变量已经造成了buf这个数组变量的越界访问。buf数组的成员本身只有0,1,2,3,那么buf[4]访问的是谁那,根据局部变量的地址分配,可以知道buf[4]的地址和int a的地址是一样,那么buf[4]实际上就是访问了const int a;那么对buf[4]的修改,自然也修改了const int a的空间,这也是为什么我们在最后打印a的值的时候看到了97这个结果。那么我们现在可以知道了,const修饰的变量是不具备不允许修改的特性的,那么对于第一个例子的现象我们又如何解释那。第一个例子,错误是在程序编译的时候给出的,注意这里,这个时候并没有生成可执行文件,说明const修饰的变量可否修改是由编译器来帮我们保护了。而第二个例子里,变量的修改是在可执行程序执行的时候修改的,说明a还是一个变量。综上所述,我们可以得出一个结论,那就是const修饰的变量,其实质是告诉程序员或编译器该变量为只读,如果程序员在程序中显示的修改一个只读变量,编译器会毫不留情的给出一个error。而对于由于像数组溢出,隐式修改等程序不规范书写造成的运行过程中的修改,编译器是无能为力的,也说明const修饰的变量仍然是具备变量属性的。2、 被const修饰的变量,会被操作系统保护,防止修改如果对于第一个问题,有了理解的话,那么这个问题,就非常容易知道答案了。Const修饰的变量是不会被操作系统保护的。其原因是操作系统只保护常量,而不会保护变量的读写。那么什么是常量?比如“hello world”这个字符串就是被称为字符串常量。对于这个问题的另一种证明方法,可以看下面这个程序:int main{const int a;char *buf = “hello world”;printf(“the &a is %p, the buf is %p ”,&a, buf);}可以发现buf保存的地址是在0x08048000这个地址附近的,而a的地址是在0xbf000000这个地址附近的,而0x08048000附近的地址在我们linux操作系统上是代码段。这也说明了常量和变量是存放在不同区域的,自然操作系统是会保护常量的。

const和int的区别是什么?

一、区别如下:1、int定义的量是变量,它的值可以更改;而const int 定义的是一个常量,它的值不可以更改。2、int在定义的时候,不需要初始化,而const int 在定义的时候必须初始化;二、const的作用:把对象转换成一个常量拓展资料const与define。两者都可以用来定义常量,但是const定义时,定义了常量的类型,所以更精确一些。#define只是简单的文本替换,除了可以定义常量外,还可以用来定义一些简单的函数,有点类似内联函数(Inline)。const和define定义的常量可以放在头文件里面。参考资料:百度百科:CONST

const 放在函数后表示什么意思?

这样的函数叫常成员函数。常成员函数可以理解为是一个“只读”函数,它既不能更改数据成员的值,也不能调用那些能引起数据成员值变化的成员函数,只能调用const成员函数。

全局变量和const定义是什么?

全局变量的定义为本函数和其他函数所共用。const定义是指使用类型修饰符const说明的类型。一、全局变量全局变量是编程术语中的一种,源自于变量之分。变量分为局部与全局,局部变量又可称之为内部变量。变量由某对象或某个函数所创建的变量通常都是局部变量,只能被内部引用,而无法被其它对象或函数引用。全局变量既可以是某对象函数创建,也可以是在本程序任何地方创建。全局变量是可以被本程序所有对象或函数引用。二、CONST(C中的CONST)const是一个C语言(ANSI C)的关键字,具有着举足轻重的地位。const它限定一个变量不允许被改变,产生静态作用。使用const在一定程度上可以提高程序的安全性和可靠性。清晰理解const所起的作用,对理解对方的程序也有一定帮助。CONST在其它编程语言中也有出现,例如Pascal、C++、PHP5、B#.net、HC08 C、C#等。

我有一款手表、背面写着VACHERON CONSTANTIN GENEVE SWISS MADE 是什么意思呢 ?

意思是:江诗丹顿(世界最贵)瑞士制造,不过你这一切都是假的,也就值个两三百块钱而已,真表几十万人民币到几百万以上, 不是家财万贯的超级土豪买不了,因为戴几十万几百万的表 ,那你的家产要多于这块表的价格,比如几百万的车,几千万的房子,什么什么的。

放在函数后面的const是什么意思

(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
 首页 上一页  10 11 12 13 14 15 16 17 18 19 20  下一页  尾页