在C++中尽可能用const
来源:互联网 发布:形容男生的网络词语 编辑:程序博客网 时间:2024/04/30 20:10
本文是关于C++中const的一些用法及其含义的探讨。
尽可能用const替换#define
#define指定的记号会在预编译时期进行替换,没有进入编译时期的符号表(symbol table)里,会存在潜伏的隐患。
#define BufferSize 65536const int BufferSize = 65536;
上面定义了BufferSize,用const修饰可以让编译器帮我们对变量进行类型检查,若编译出错,编译器可以为我们提供更有用的提示信息,而不仅仅是一个数字65536。 另外,#define是简单的记号替换,可能导致目标码中65535出现多份,造成额外的码量,const则不会出现这样的情况。
const修饰的对象
const可以修饰global和namespace中定义的常量;
修饰class中声明的成员变量,成员函数;
修饰函数内部定义的局部对象;
修饰函数的返回值,修饰函数的参数。
const int BufferSize = 65536; // 全局常量namespace om{const int OrderSize = 1e6; // 命名空间内部常量class Order{public: void init(const Order& order) { // 函数内部const data const double initPrice = order.getPrice(); // todo } // const 成员函数, // 需注意const成员函数不能改变成员变量或者调用non-const成员函数, // 若无法避免要修改成员变量,可将成员变量声明为mutable const double getPrice() const { return mPrice; } // 参数类型是const double void setPrice(const double price) { // 参数price是只读的,不应该被改变 mPrice = price; } // 返回类型是const Order& const Order& operator+=(const Order& order) { this->mPrice += order.getPrice(); return *this; } const std::string& toString() const { // 由于mString是mutable的,const 成员函数也能修改, // 这样设计仅仅是为了举例说明non-const的toString()可以调用 // const toString()而避免重复代码,减少代码维护难度 mString = ""; mString += "price:" + std::to_string(mPrice); return mString; } std::string& toString() { // 调用const toString()避免重复代码 return const_cast<std::string&>( static_cast<const Order&>(*this).toString()); }public: static const int OrderType = 10; // const 成员变量private: double mPrice; mutable std::string mString; // const成员函数也能修改该变量};}
1 0
- 在C++中尽可能用const
- C语言const与指针——为什么不能用char **给const char **赋值
- const在C中的使用
- const在C中的使用
- const在c中的用法
- const在c中的用法
- const在c与c++
- const在C和C++中的区别
- const 在c和c++中的区别
- const在c/c++中的区别
- const关键字在c和c++中
- const 在C/C++里面的用途
- CONST在C语言中的应用
- const static在c c++中的作用
- const在C与C++中的区别
- const在C和C++中的区别
- const在c/c++中的区别
- const在C/C++中的使用
- 什么叫工作到位
- line-height
- [bigdata-018] java spring 快捷入门
- jquery判断字符输入个数(数字英文长度记为1,中文记为2,超过长度自动截取)
- SpringMVC简单学习笔记
- 在C++中尽可能用const
- CLASS文件格式学习
- 【牛客网】网易2017内推笔试编程题合集(一)
- 跟着斯坦福白胡子老头学iOS app生命周期
- Java集合(HashMap)
- 欢迎使用CSDN-markdown编辑器
- 动态规划之最长递增子序列 最长不重复子串 最长公共子序列
- 物理地址和线性地址介绍
- mysql表的清空、删除和修改操作详解