码迷,mamicode.com
首页 > 编程语言 > 详细

C++中的const用法

时间:2014-11-22 12:05:44      阅读:226      评论:0      收藏:0      [点我收藏+]

标签:c++   const   编程   

本文参考《C++编程思想》第八章内容,看过这本书的,请无视以下内容。

在C++中,const一共有四个作用,分别用于值替代、指针、函数参数和返回以及类。

一 值替代

1.const最初的动机就是值替代,也就是说,以前在C语言里,值替代的典型用法是这样的:

#define BUFSIZE 100

现在可以用:

const  int  bufsize = 100;

这样替换的好处是可以进行类型检查,避免出现一些问题。


2.这样定义的const的值在编译期间就能确定,因此可以用于定义数组,比如:

char buf[bufsize];

3.const变量定义时必须初始化。应该这样:

const int a =100;

如果只是声明:

const int a;

会报错的,不信你试试?

 

4.原因是C++中const变量默认的是内部连接,也就是在变量所在文件内有效,相当于static的效果,因此在不同的文件中定义同名的const变量是没有任何问题的。但是如果多个文件要共用同一个const变量应该怎么办呢?在某一处定义并初始化,像这样:

extern cons tintx = 1;

并在其他文件里声明:

extern constint x;

所以,const变量在定义时就得初始化的原因就是:把定义和声明区别开。

 

二 指针

1.指向const的指针

const int * u;
int const * u;

这两者的意思都是:u是一个int型指针,指向一个constint。也就是指向常量的指针。

 

2.const指针

int d = 1;
int * const w =&d;

w为一个int型指针,指向一个int值,w指针本身不变。

Ps:为什么有两条语句,参照上文,const变量定义时需要初始化。

 

3.结合第一点和第二点,可以定义一个指针不变并且指针指向的值也不变的const量,怎么写呢,你猜?

 

4.可以将一个非const变量的地址赋给const指针,但不能将一个const值的地址赋给一个非const指针。

int d = 1;
const int a = 1;
const int * b =&d;   //right
int * c =&a;    //wrong

 

三 函数参数和返回类型

1.const变量按值传递,则该值不能改变。

void f1(constint i) {
    i++; //wrong
}

 

2.const量作为返回值时,没什么意义。因为起不到想要的效果,你可以试一下。

 

3.const指针作为函数参数的情况。这种情况比较复杂,只需要记住,对于用户自定义的数据类型,当用该类型的引用作为函数参数的时候,一定要加const。

 

四 类

1.const类型的成员变量及其初始化

class Integer {
    int i;
public:
    Integer(int ii = 0) ;
    void print();
};

Integer::Integer(int ii = 0) : i(ii) {}
void Integer::print() { cout << i << ' '; }

2.编译期间类里的常量。必须在定义的时候初始化。

class StringStack {
    static const int size = 100;
    const string* stack[size];
    int index;
public:
    StringStack();
    void push(const string* s);
    const string* pop();
};

StringStack::StringStack() : index(0) {
    memset(stack,0,size * sizeof(string *));
}
void StringStack::push(const string* s) {
    if(index < size)
        stack[index++] = s;
}
const string* StringStack::pop() {
    if(index > 0) {
        const string* rv = stack[--index];
        stack[index] = 0;
        return rv;
    }
    return 0;
}

3.const对象的概念是对象的数据成员在其生命周期内不被改变。因此,它只能调用const成员函数,不能调用非const成员函数,因为那有可能改变数据成员。

class Quoter {
    int lastquote;
public:
    Quoter();
    int lastQuote() const;
};

Quoter::Quoter() {
    lastquote = -1;
    srand(time(0));
}
int Quoter::lastQuote() const {
    return lastquote;
}

C++中的const用法

标签:c++   const   编程   

原文地址:http://blog.csdn.net/bing_bing304/article/details/41379337

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!