`
kmplayer
  • 浏览: 496458 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

条款21:尽可能使用const

阅读更多
1,只要某值真的保持不变,就应该明确表示出来,这样一来便可以获得编译器的帮助.

2,const最具威力的用途用在函数声明上.

3,令函数返回一个常量值,可以降低client的错误,有不至于放弃效率.
如:
const Rational operator*(const Rational& lhs,const Rational& rhs);
为了防止下面的情况:
Rational a, b, c;
...
(a * b) = c;      // assign to the product of a*b!
注:将一个数值赋给两个数值的乘积结果,这在内建型别中肯定不合法.

4,将const应用于参数身上,其行为就想local const对象一样.

5,const member函数,指明那个成员函数可由const对象调用.
例:
class String
{
public:
  ...
  // operator[] for non-const objects
  char& operator[](int position)
  { return data[position]; }
  // operator[] for const objects
  const char& operator[](int position) const
  { return data[position]; }
private:
  char *data;
};
String s1 = "Hello";
cout << s1[0];                  // calls non-const
                                // String::operator[]
const String s2 = "World";
cout << s2[0];                  // calls const
                                // String::operator[]


6,bitwise constness(位常量论)
如果成员是指针,意味着指针指向的对象可以被修改.
由此导出conceptual constness(概念常量论)

关键字:mutable,可以有效解放nonstatic data members在bitwise constness方面的束缚.

7,可能你想要改变const String* const str的值.
可能可行的办法:
做出一个local版的str,去掉const属性.
String* const localStr = const_cast<String* const>(str);
改变localStr,意味着str的改变,因为指针指向同一个地方.

还有一种情况:
例如strlen错误的声明:
size_t strlen(char *s); //应该是const char* s

cosnt char* mm="wisdom";
此时可以这么做:
strlen(const_cast<char*>(mm));
分享到:
评论

相关推荐

    Effective.C++.中文第二版.50条款doc文档.chm

    条款21: 尽可能使用const 条款22: 尽量用“传引用”而不用“传值” 条款23: 必须返回一个对象时不要试图返回一个引用 条款24: 在函数重载和设定参数缺省值间慎重选择 条款25: 避免对指针和数字类型重载 条款26: 当心...

    Effective C++

    条款21:尽可能使用CONST 条款22:尽量用传引用而不用传值 条款23:必须返回一个对象时不要试图返回一个引用 条款24:在函数重载与设定参数默认值间慎重选择 条款25:避免对指针与数字类型的重载 条款26:当心潜在的二义性...

    CUJ:标准库:定义iterator和const iterator.docx

    CUJ:标准库:定义iterator和const iterator

    EffectiveC++终稿44__tagged_2019-06241

    目 录一.让自己习惯 C++ 1条款 03:尽可能使用 const 23)const 修饰成员函数 2条款 04:确定对象被使用前已先被初始化 4二.构造/析构

    C++:关于const的思考.doc

    常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。(当然,我们可以偷梁换柱进行更新:) 2、为什么引入const?  const 推出的初始目的,正是为了取代预编译指令,消除它的缺点...

    Effective C++(第三版)

    条款03:尽可能使用const use const whenever possible. 条款04:确定对象被使用前已先被初始化 make sure that objects are initialized before they're used. 2. 构造/析构/赋值运算 constructors, destructors, ...

    effective stl 中文 pdf

    条款21: 永远让比较函数对相等的值返回false 条款22: 避免对set和multiset的键值进行修改 条款23: 考虑用排序的vector代替关联容器 条款24: 当效率很关键时尽量用map::insert代替map::operator 条款25: 让自己...

    Effective C++ 中文版

    条款03:尽可能使用const 条款04:确定对象被使用前已先被初始化 2.构造/析构/赋值运算 条款05:了解C++默默编写并调用哪些函数 条款06:若不想使用编译器自动成生的函数,就该明确拒绝 条款07:为多态基类声明...

    effective stl stl 技巧

    条款21:永远让比较函数对相等的值返回false 条款22:避免原地修改set和multiset的键 条款23:考虑使用有序vector代替关联容器 条款24:当关乎效率时应该在map::operator[]和map-insert之间仔细选择 条款25:...

    Effictive STL CHM中文版

    条款21: 永远让比较函数对相等的值返回false 条款22: 避免对set和multiset的键值进行修改 条款23: 考虑用排序的vector代替关联容器 条款24: 当效率很关键时尽量用map::insert代替map::operator 条款25: 让自己...

    python开发真实星空显示tkinter软件

    {'long': 0.03660100303760025, 'lat': 0.5077259659824991, 'light': 21, 'const': 1}, {'long': 0.04004802831028905, 'lat': 1.0323574005393255, 'light': 23, 'const': 18}, {'long': 0.03944444109507185, '...

    Effective STL(中文)

    如何将vector和string的数据传给传统的API 条款17:使用“交换技巧”来修整过剩容量 条款18:避免使用vector&lt;bool&gt;&lt;br&gt;关联容器 条款19:了解相等和等价的区别 条款20:为指针的关联容器指定比较类型...

    EFFECTIVE C++ 条款03 尽量使用const 思维导图

    EFFECTIVE C++ 条款03 尽量使用const 思维导图

    Const 用法小结

    C++中的各种Const用法小结:const常量,const 修饰类的数据成员等等

    std::string、char*、const char*转托管byte数组或托管字符串String

    std::string、char*、const char*转托管byte数组或托管字符串String

    徐彤教程-C++编程const与static第0263讲:实例03-const成员函数

    徐彤老师耗时三年倾心制作,专业录制,通俗,细致的讲解了C++ 编程从入门到高级

    C++:浅谈修饰符const

    C++:浅谈修饰符const 魔鬼作坊学游戏辅助制作 moguizuofang.com

    徐彤教程-C++编程const与static第0262讲:实例03-const成员变量

    徐彤老师耗时三年倾心制作,专业录制,通俗,细致的讲解了C++ 编程从入门到高级

    BBTree 排序树 hpp文件

    该文件是建立在排序树的基础之上的,该文件介绍如下: 该文件文件名为"BBTree.hpp",可以使元素从小到大进行排列,说明如下: //*以下内容为BBTree基础代码,其中: ...按照说明使用变量可实现任何类型数值从小到大排列

    Nonuniform rational B-spline

    B样条的英文资料, 自由曲面建模的相关自理……………………

Global site tag (gtag.js) - Google Analytics