zoukankan      html  css  js  c++  java
  • C++中const用法

    1.const和指针:

    如果const出现在星号左边,表示被指物是常量;如果出现在星号右边,表示指针自身是常量;如果出现在星号两边,表示被指物和指针两者都是常量。

    char greet[] = “Hello”;

    char* p = greet; 

    //①greet不能变,即不能通过(*p) = 的方式改变

    //但仍可通过greet = 的方式改变;指针可指向别处。

    const char* p = greet;

    char const * p = greet; //同①

    char* const p = greet;  //②指针不能指向别的,只能greet;greet可改变

    const char* const p = greet;//③都不能变

    2.const和STL的迭代器:

    STL迭代器是以指针为根据创建出来的,可以视迭代器为T*指针。

    ①声明迭代器为const。与声明指针为const一样(声明一个T* const指针),表明该迭代器不能指向其他的东西(容器),但是所指向的东西的值是可以改变的。

    ②声明迭代器指向东西的值为const,但指向的东西(容器)可以换成其他的,需要const_iterator。

    例如:

    std::vector<int> vec;

    const std::vector<int>::iterator it1 = vec.begin(); //类似于T* const

    *it1 = 10; //正确,指向东西的值可以改变

    it1++;//错误,不能改变指向的东西。

    std::vector<int>::const_iterator it2 = vec.begin();//类似于const T*

    *it2 = 10;//错误,指向的东西的值不能改变

    it2++;//正确,指向的东西可以改变

    3.函数与const

    ①函数后加const:const是对函数的一个限定,使其无法修改类内的数据成员。const告诉别人这个函数不会改变对象的状态。

    声明一个函数用 const 关键字来说明这个函数是一个只读函数(read only method),即不会修改任何的数据成员也就是不会改变该对象的状态。该类函数的声明和定义时都要加上 const 关键字。

    不能调用非const函数:如果我们在编写 const 函数时不小心修改了数据成员,或者调用了其他非 const 成员函数(即会修改数据成员的函数),编译器将会报错。这无疑让代码更加的健壮。

    如 void action(A a) const;

    ②const修饰函数返回值

    用const来修饰返回的指针或引用,保护指针指向的内容或引用的内容不被修改,也常用于运算符重载。归根究底就是使得函数调用表达式不能作为左值。

    如:const A& action (A a);

    ③形式参数加const:防止传入的实参被改变。

    如:void action(const A& a);

  • 相关阅读:
    关于ORA-04091异常的出现原因,以及解决方案
    <Interview problem>二进制加法
    Hadoop日志文件分析系统
    Android studio安装
    weex环境配置
    weex构建项目
    参数保存
    下拉搜索的小白demo
    angularJs中$http获取后台数据实例(搜集到的)
    前后台对接angularjs(搜集的)
  • 原文地址:https://www.cnblogs.com/fan-0802-WHU/p/10961279.html
Copyright © 2011-2022 走看看