zoukankan      html  css  js  c++  java
  • const理解

    const经常犯错的要点

    1. 常成员变量
      1.1. 只能在初始化列表赋值
      1.2. 不能在类直接初始化
    2. 在类中常成员函数是不能修改任何成员变量的
      关于常成员函数不能修改成员变量的规定,我在网上搜了很多,大家举的例子都是 一个整形变量被修改的例子如下所示:
      int GetLength() const {
      return len++;
      }
      这样的不正确。没有关于map,hash_map, unordered_map的例子。
      前段时间在写一个常成员函数的逻辑时候,通过[]去获取了map的value发现是编译不通过,于是我就修改成iterator的方式去获取value,发现还是编译不通过。于是开始思考,然后网上查找,最后才知道只能用const_iterator的方式在常成员函数中访问map成员变量。
      通过这个例子发现很多概念只有在真正用的时候才有深刻的理解,尽管这些概念看了很多遍。

    const知识要点

    const int a;
    int const b;
    const int* c;
    int * const d;
    const int *const e;

    含义:
    //第一个第二个意思一样 代表一个常整形数
    //第三个 c是一个指向常整形数的指针(所指向的内存数据不能被修改,但是本身可以修改)
    //第四个 d 常指针(指针变量不能被修改,但是它所指向内存空间可以被修改)
    //第五个 e一个指向常整形的常指针(指针和它所指向的内存空间,均不能被修改)

    举例如下:

    #include<iostream>
    #include<string>
    #include<map>
    using namespace std;
    class A {
        public:
        const int x;
        // const int x = 100; 错误
        A();
        A(int a);
        ~A() {}
        void GetData(string name) const;
        private:
        map<string,string> name_map_;
    };
    A::A(int a):x(a) {
        cout << "construcor with params" << endl;
    }
    A::A():x(0) {
        name_map_["A"] = "张三";
        name_map_["B"] = "李四";
        name_map_["C"] = "王五";
    }
    void A::GetData(string key) const {
        //cout << name_map_[name] << endl;  错误
        // map<string, string>::iterator it = name_map_.find(key); 错误
        map<string, string>::const_iterator it = name_map_.find(key);
        cout << it->second << endl;
    }
    
    int main(void) {
        A a1;
        a1.GetData("A");
        A a2(100);
        cout << a2.x << endl;
        return 0;
    }
    

  • 相关阅读:
    sphinx安装
    如何获取原生数据
    DOM详解
    JavaScript简单入门(补充篇)
    JavaScript的简单入门
    Java正则表达式练习
    Java反射机制(Reflect)解析
    21070118记
    CSS3设置Table奇数行和偶数行样式
    获取当前地址
  • 原文地址:https://www.cnblogs.com/zh20130424/p/11173065.html
Copyright © 2011-2022 走看看