条款03:尽可能使用const
面对指针的时候,既可以指出指针自身,也指针所指向的事物,或者两者都是 const。
char str[] = "hello"; char* p = str; //指针不是const,字符串也不是const const char* p = str; //指针不是const,字符串是const char* const p = str; //指针是const,字符串不是const const char* const p = str; //指针是const,字符串也是const
为了方便记忆。如果关键字const出现在星号左边,表示被指物是const。如果const出现在星号右边,表示指针自身是const。如果出现在星号两边,则两者都是const。
声明迭代器const就像声明指针为const一样,表示这个迭代器不得指向不同的东西,但是他所指向的东西是可以改动的。如果你希望迭代器所指向的东西不可以被改动,你需要的是const_iterator.
vector<int>vec; const vector<int>::iterator iter = vec.begin(); //这里迭代器类似于 T* const 指针的指向不能改变 *iter = 10; //没问题,改变iter所指物 ++iter; //error 不可以改变指向 vector<int>::const_iterator cIter = vec.begin() //类似于T* const 所指的对象不可改变
另函数返回一个常量值,往往可以降低因为客户错误而造成意外,而又不至于放弃安全性和高效性。
考虑下面一种情况
class myInt{ public: int num; myInt(int a){num = a;} }; const myInt operator*(const myInt& li,const myInt& ri){ const myInt aa(li.num*ri.num); return aa; }
至于为什么要把返回值设为const。原因是如果不这样,客户就会写出如下代码:
myInt a,b,c; (a*b) = c;
如果操作符*的返回值是const的,这样的代码就是直截了当的不合法的。将operator* 返回值设为const就是为了避免那个没有意义的赋值动作。
const 成员函数
将const实施与成员函数的目的,是为了确认该函数可作用于const对象。当两个成员函数只是const属性不同的时候,他们是可以重载的。
class myInt{ public: int num; myInt(int a){ num = a; } int& getValue(){ int res = num*num; return res; } const int& getValue() const{ const int res = num; return res; } };
我们可以这样使用上述函数
myInt mi(10); cout<<mi.getValue()<<endl; //使用non-const函数,输出100 const myInt ma(20); cout<<ma.getValue()<<endl; //使用const函数,输出20
要注意这里的返回值是一个指向int的引用。这是因为,如果返回的是一个int的话,下面的语句将无法通过编译
mi.getValue()+=1;
那是因为,如果返回的是内置类型,那么改动函数返回值从来都不合法,即便这样是合法的,你改变的也是mi.value的一个副本,而不是这个变量本身。
相关推荐
根据给定的文件信息,以下是对“精版Effective STL读书笔记”的详细解析,重点提炼了STL(标准模板库)中的关键知识点。 ### 标题:“精版Effective STL读书笔记” 此标题暗示了文档是针对《Effective STL》一书的...
从给出的部分内容来看,读书笔记主要聚焦于以下几个知识点: 1. C++语言的联邦概念:C++是一个由多个次语言构成的语言联邦,这包括了C语言核心、面向对象的C++、模板C++以及标准模板库(STL)。这种理解对于深入...
记录了我的effective-Python学习笔记,精简了effective-Python中重要的部分。effective-Python是一本值得多看几遍的书,但是看后面的几遍的时候完全可以直接看自己的学习笔记。此学习笔记侧重与比较实用的部分即前四...
"Effective Java读书笔记" Effective Java是一本关于Java编程语言的经典书籍,本笔记主要总结了Java语言的发展历程、静态工厂方法的应用、构造器模式的使用等重要知识点。 一、Java语言的发展历程 Java语言的发展...
《Effective Modern C++:改善C++11和C++14的42个具体做法(影印版)(英文版)》中包括以下主题:剖析花括号初始化、noexcept规范、完美转发、智能指针make函数的优缺点;讲解std∷move,std∷...此文档是该书的读书笔记。
《Effective Java》是Java开发领域的经典著作,作者Joshua Bloch深入浅出地阐述了编写高效、健壮的Java代码的技巧和最佳实践。以下是对该书部分内容的详细解释: 1. **产生和销毁对象** - Item1:静态工厂方法相比...
effective C++ 很好 很不错 最好的C++进阶资料
本文总结了Effective C++读书笔记,涵盖了C++的四个主要次语言:C、Object-Oriented C++、Template C++和STL。同时,文章还讨论了高效编程守则,包括使用const、enum和inline替换#define,使用const来告诉编译器和...
《Effective Java》是Java...以上仅是《Effective Java》一书中部分核心知识点的概述,实际的读书笔记中会更详细地解释这些概念,并给出具体的示例代码。通过深入学习和实践,开发者可以极大地提升其Java编程的水平。
摘录了《Effective C++》 (Scott Meyers 著)中有参考价值的编写代码建议,方面阅读
### Effective Java读书笔记(上) #### 第一章 引言 本书主要针对Java开发者提供了大量实用的编程指导建议,帮助读者提升代码质量和程序性能。在本章节中,我们将重点介绍对象的创建与销毁,以及一些重要的设计...
读书笔记:Effective Java中文版第3版笔记
读书笔记:Effective Java中文版 第2版
1.2 条款02:尽量以const,enum,inline替换#define 这个条款或许可以改为“宁可用编译器替换预处理器”。 通常C++要求你对所使用的任何东西提供一个定义式,但如果它是个class专属常量 又是static且为整数类型...
Effective Java 读书笔记 - 枚举与注解 本文总结了Effective Java 中关于枚举与注解的知识点,涵盖了枚举类型的优点、使用指南、避免使用 int 常量、使用 EnumSet 和 EnumMap 等。 枚举类型的优点 枚举类型提供了...
《Effective C++》是Scott Meyers撰写的一本经典C++编程指南,旨在帮助开发者写出更高效、更可维护的代码。...阅读Roy T的读书笔记可以帮助我们回顾和巩固这些关键概念,更好地将它们应用于实际项目中。
Effective Objective-C是本学习Objective-C的好书,没有见pdf版,亚马逊上的这儿本书的价格不菲。让我们来看看书里的内容和完整的学习笔记吧。
关于Effective STL的读后感,还有一些此间想得东西和解决的问题
读书笔记:Effective Java 中文版(2版和3版)
读书笔记:Effective Java中文版第二版示例、笔记