VB中的Const是取自英文单词“constant”的前四个字母,其中文意思是“常数”“常量”的意思。
VB中用Const命令来定义常量,常量说明语句的格式是:
Const 常量名 As 类型=表达式
对于一些在程序过程中始终保持不变的常数、字符吕,可以用常量说明语句来定义,这样可以提高程序的可读性和可维护性。
常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。因此,定义或说明常类型时必须进行初始化。
一般常量和对象常量
1 一般常量
一般常量是指简单类型的常量。这种常量在定义时,修饰符const可以用在类型说明符前,也可以用在类型说明符后。如:
int const x=2;
或
const int x=2;
定义或说明一个常数组可采用如下格式:
<类型说明符> const <数组名>[<大小>]…
或者
const <类型说明符> <数组名>[<大小>]…
例如:
int const a[5]={1, 2, 3, 4, 5};
2 常对象
常对象是指对象常量,,的rTmag教~无_;定义格式如下:
<类名> const <对象名>
或者
const <类名> <对象名>
定义常对象时,同样要进行初始化,并且该对象不能再被更新,修饰符const可以放在类名后面,也可以放在类名前面。
常指针和常引用
1 常指针
使用const修饰指针时,由于const的位置不同,而含意不同。下面举两个例子,说明它们的区别。
下面定义的一个指向字符串的常量指针:
char const prt1 = stringprt1;
其中,ptr1是一个常量指针。因此,下面赋值是非法的。
ptr1 = stringprt2;
而下面的赋值是合法的:
ptr1 = "m";
因为指针ptr1所指向的变量是可以更新的,不可更新的是常量指针ptr1所指的方向(别的字符串)。
下面定义了一个指向字符串常量的指针:
const ptr2 = stringprt1;
其中,ptr2是一个指向字符串常量的指针。ptr2所指向的字符串不能更新的,
K提教{网i^管H6L络v^
而ptr2是可以更新的。因此,
ptr2 = "x";
是非法的,而:
ptr2 = stringptr2;
是合法的。
所以,在使用const修饰指针时,L网VMXN$[m}应该注意const的位置。定义一个指向字符串的指针常量和定义一个指向字符串常量的指针时,const修饰符的位置不同,前者const放在和指针名之间,后者const放在类型说明符前。
2 常引用
使用const修饰符也可以说明引用,被说明的引用为常引用,该引用所引用的对象不能被更新。其定义格式如下:
const <类型说明符> & <引用名>
例如:
const double & v;
在实际应用中,f网|B\xc{Lf&pHhA育常指针和常引用往往用来作函数的形参,这样的参数称为常参数。
在C++面向对象的程序设计中,指针和引用使用得较多,其中使用const修饰的常指针和常引用用得更多。使用常参数则表明该函数不会更新某个参数所指向或所引用的对象,这样,在参数传递过程中就不需要执行拷贝初始化构造函数,这将会改善程序的运行效率。
下面举一例子说明常指针作函数参数的作法。
#include
const int N = 6;
void print(const int p, int n);
void main()
{
int array[N];
for (int i=0; i cin>>array[i];
print(array, N);
}
void print(const int p, int n)
{
cout<<"{"<<p;
for (int i=1; i cout<<","<<(p+i);
cout<<"}"< }
常成员函数
使用const关键字进行说明的成员函数,称为常成员函数。只有常成员函数才有资格 *** 作常量或常对象,没有使用const关键字说明的成员函数不能用来 *** 作常对象。常成员函数说明格式如下:
<类型说明符> <函数名> (<参数表>) const;
其中,const是加在函数说明后面的类型修饰符,它是函数类型的一个组成部分,因此,在函数实现部分也要带const关键字。下面举一例子说明常成员函数的特征。
#include
class R
{
public:
R(int r1, int r2) { R1=r1; R2=r2; }
void print();
void print() const;
private:
int R1, R2;
};
void R::print()
{
cout< }
void R::print() const
{
cout< }
void main()
{
R a(5, 4);
aprint();
const R b(20, 52);
bprint();
}
该例子的输出结果为:
5,4
20;52
该程序的类声明了两个成员函数,|Tv;T专tj%专I
o;(6!gG2]教bzz专"
其类型是不同的(其实就是重载成员函数)。有带const修饰符的成员函数处理const常量,这也体现出函数重载的特点。
常数据成员
类型修饰符const不仅可以说明成员函数,也可以说明数据成员。
由于const类型对象必须被初始化,并且不能更新,因此,在类中说明了const数据成员时,只能通过成员初始化列表的方式来生成构造函数对数据成员初始化。
下面通过一个例子讲述使用成员初始化列表来生成构造函数。
#include
class A
{
public:
A(int i);
void print();
const int &r;
private:
const int a;
static const int b;
};
const int A::b=10;
A::A(int i):a(i), r(a)
{
}
void A::print()
{
cout< }
void main()
{
A a1(100), a2(0);
a1print();
a2print();
}
该程序的运行结果为:
100:10:100
0:10:0
在该程序中,说明了如下三个常类型数据成员:
const int & r;
const int a;
static const int b;
其中,r是常int型引用,a是常int型变量,b是静态常int型变量。
程序中对静态数据成员b进行初始化。
值得注意的是构造函数的格式如下所示:
A(int i):a(i),r(a)
{
}
其中,冒号后边是一个数据成员初始化列表,它包含两个初始化项,用逗号进行了分隔,因为数据成员a和r都是常类型的,需要采用初始化格式。
const 定义的是一个常量,应该说他是一个不可改变的左值,就是说它和其他变量一样占用了内存,但是呢,这个内存的东西不能变,正像Fixend所说,假如你有#define SIZE 10 ,这个SIZE 在编译时已经知道了值,c/c++需要在编译时知道数组的大小。而const int SIZE 这个值还是要在运行时取出来的。
但是由于编译技术,有的先进编译器将const int 类型的常量当成宏定义,至于和普通的宏定义有什么不同呢,因为是量,所以它可以有作用域和访问控制(对C++),而c中,用const 量往往能够增强代码的可读性,防止用简单的宏定义(简单的字符串替换)和令代码晦涩难懂的数字。
常量,表示不能修改,即只能读,不能写
比如:
const int i = 6; // 定义了一个常量,这个常量的值不会被改变。
有引用它的代码是:
i = 123; // 不行,因为i是常量,不能写,即被修改。
你的函数中没有出现对成员变量的修改,应该是没有问题的(除非你的num和denom没定义,一一!)。
原因如下:
c++语言之所以灵活度高,那是因为c+编译器背着程序员做很多事情。比如这里的const。当一个函数被用作成员函数时,其实有一个隐式的this指针存在。成员函数会被编译器改变为一般的全局函数,同时添加一个参数,即该类的指针。
比如你的函数
void fraction::displayFrac() const
{
cout<<num<<'/'<<denom;
}
会被变为:
void displayFrac(fraction this) const //所以说成员函数和全局函数实质上是一致的。
{
//注意多了this
cout<<this->num<<'/'<<this->denom;//这里我假设num和denom是类fraction的成员变量,而不是全局变量。
}
现在分析你的问题:根据c++语法,当const修饰成员函数时,传入的this指针变为指向常数的指针。由于this指针是指向你的对象(比如你的调用代码为fracdisplayFrac(),那么this指向对象frac),故而在函数内不能通过this指针改变frac的值(即不能改变frac的数据成员)。
这里还涉及到常量指针和指针常量等问题。如果不明白多翻翻语法书。反正记住一旦成员函数的函数体被const修饰,那么在该函数内就不能改变类的数据成员,但是其他的改变(非类成员的赋值等)没问题。
const是常量,其内容在代码段,该内容无法修改,赋值不能成功,有些数不希望能更改的,那么这些数最好不要声明为变量。。。对于PC无所谓,定义成变量无非就是不小心被改,悲剧了而已,const你赋值 *** 作不会编译通过,也不会出现这种风险,理论上注意点就没问题。。。。。
但对于嵌入式芯片这一点const就很重要,没有const数据是在数据存储区,而对于嵌入式芯片很多数据存储区很小,不用const会带来额外开销。。。带const则数据在程序存储器ROM,这里通常很大,无所谓。。。不过C#毕竟不会用在嵌入式代码里,嵌入式开发一般用C语言,只是提一下const的优点。。。
以上就是关于VB中const是什么意思全部的内容,包括:VB中const是什么意思、const在c++里的用法、const的作用是什么等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)