const 和 const_cast】的更多相关文章

对于const变量,我们不能修改它的值,这是这个限定符最直接的表现.但是我们就是想违背它的限定希望修改其内容怎么办呢?下边的代码显然是达不到目的的: ; int modifier = constant; modifier = ; 因为对modifier的修改并不会影响到constant,这暗示了一点:const_cast转换符也不该用在对象数据上,因为这样的转换得到的两个变量/对象并没有相关性. 只有用指针或者引用,让变量指向同一个地址才是解决方案,可惜下边的代码在C++中也是编译不过的: ;…
[1] const_cast的作用 一.常量指针被转化成非常量指针,并且仍然指向原来的对象: 二.常量引用被转换成非常量引用,并且仍然指向原来的对象: 三.常量对象被转换成非常量对象. [2] 实例代码 代码如下: #include <iostream> using namespace std; ; class A { public: int m_nNum; public: A(); }; A::A(int nValue):m_nNum(nValue) { } void TestFun() {…
/////////////////////////////////////////////////////////////////////////////// // // FileName : cast_item27.cpp // Version : 0.10 // Author : Ryan Han // Date : 2013/10/31 15:43:55 // Comment : // ////////////////////////////////////////////////////…
1.尽量使用const修饰不会赋值操作的变量,防止 "无意义行为" 2.const成员函数遵守: bitwise constness 法则(只要函数内部不改变成员变量的,都是允许const修饰函数的) 3.如果某些成员在const函数内部总是会被改变 可以在变量声明处添加 “mutable”声明为多变的(bitwise constness允许) 4.在const成员和non-const成员代码重复性大的情况,可以使用non-const成员调用const成员,减少代码复用性 C/C++:…
// const和函数一起使用的情况 class Dog { int age; string name; public: Dog() { age = 3; name = "dummy"; } // 参数为const,不能被修改 void setAge(const int& a) { age = a; } // 实参是常量时,调用此函数 void setAge(int& a) { age = a; } // 实参不是常量时,调用此函数 void setAge(const…
Thank to the pepole who devote theirself to the common libs. STL(http://www.cplusplus.com/reference/) 旧的C++头文件名如<iostream.h>将会继续被支持,尽管它们不在官方标准official standard中.这些头文件的内容不在名字空间std中.No _STDBEGIN (namespaces std {}and _STDEND. 新的C++头文件如<iostream>…
之前已经总结过函数模板和类模板了,对于模板还有一些其他的特性,这篇主要介绍这些特性.主要都是一些特殊情况. 模板的其他特性 1.缺省参数 (1)类模板的模板参数可以带有缺省值,实例化该模板时,如果提供了相应的实参,则忽略缺省值,反之则以缺省作为对应形参的值 (2)如果某个模板参数带有缺省值,那么它后面的所有参数都必须带有缺省值 (3)C++98不允许为函数模板的参数指定缺省值<尖括号里面的>, c++11允许     编译的时候需要加上 -std=c++11 (4)对于函数模板,如果模板参数的…
1.操作符函数: 在特定条件下,编译器有能力把一个由操作数和操作符共同组成的表达式,解释为对 一个全局或成员函数的调用,该全局或成员函数被称为操作符函数.该全局或成员函数 被称为操作符函数.通过定义操作符函数,可以实现针对自定义类型的运算法则,并使之 与内置类型一样参与各种表达式运算. 2.首先我们先介绍下左值和右值,因为我们在运用运算符的时候要尽量和内置类型的一致性. 左值:有名的可以直接取地址的我们称之为左值,左值的特性是可以修改的. 右值:右值主要是一些临时变量,匿名变量,字符串字面值常量…
转载:http://dsqiu.iteye.com/blog/1734640 条款一 数据抽象 抽象数据设计遵循步骤:(1)为类型取一个描述性的名字.(2)列出类型所能执行的操作,不要忘了初始化(构造函数),清理(析构函数),复制(复制操作)以及转换(不带explicit关键字修饰的但参数构造函数和转换操作符),而不是为数据成员提供一串get/set操作.(3)为类型设计接口.(4)实现类型,对抽象数据类型实现的改动,远比对其接口的改动要来得频繁. 条款二 多态 按照C++标准所言,“多态类型”…
在C++中,我们经常遇到在某个特定的时刻,需要将函数进行包装调用,尤其是当我们需要将不同签名的函数放到同一个集合时,由于函数签名不一致导致我们不能直接将各式各样的函数指针放到诸如list这样的集合中,因此对函数进行包装就显得格外重要.现在来介绍一下我写的一个函数包装器. 还是需要用到模板技巧,写这种类库没有模板将是不可能实现的任务,大家顺便学习一下模板编写也挺好的. 还是不废话,先上实例,后贴完整类库,这个类库需要用到前面写的萃取和序列化库,当然了,序列化库是可以被替换的,只要满足接口一致. 这…