1.今天用vc6.0的时候定义变量发生了很奇怪的错误:
error C2275: 'wchar_t' : illegal use of this type as an expression百思不得姐啊,后来查了一下才知道,C语言不允许随时定义变量,所有定义的变量都只能放在函数开头
,这也是C和C++的一个重要区别!
然后还有个乱码问题,vc6.0预编译环境的设置只添加了UNICODE,在工程->设置->C/C++标签下的预处理程序下面加上就可以了
2.(int&)a:将a的引用强制转换为整型,
意思是a所在的内存,本来定义的时候为float类型,并初始为1.0f,
但现在我要按int类型解释这段内存(也就是说a所在的内存地址中的数据本来是按float型存储表示的,你非要按int型来解释不可)。
1.0f
在内存中的存储为
把他按整型数解释为2^29+2^28+2^27+2^26+2^25+2^24+2^23=1065353216
(int&)a 相当于
3.非const引用形参只能与完全同类型的非const对象关联;
非引用形参既不能用const对象初始化,也不能用字面值或产生右值的表达式实参初始化
所以如果使用引用形参的唯一目的只是避免复制,则应该使用const引用形参
4.vector和其他容器类型的形参应该用迭代器传递
5.数组形参会自动转化为指向其第一个元素的指针;
数组实参:非引用形参会被转换成指针,引用形参传递数组本身。在这种情况下,数组大小成为形参和实参类型的一部分,编译器将检查实参的大小与形参的大小是否匹配,如:
void printValues(int (&arr)[10]){...}
6.除了static成员函数,每个成员函数都有一个额外的、隐含的形参this,在调用成员函数时,形参this初始化为调用函数的对象的地址。
const成员函数改变了隐含的this形参的类型(const),所以const成员函数不能修改调用该函数的对象。
const对象、指向const对象的指针或引用只能用于其const成员函数,如果尝试用它们来调用非const成员函数,则是错误的
7.是否将形参定义为const并不影响传递到函数的对象,原因在于实参传递的方式:复制形参时并不考虑形参是否为const——函数操纵的只是副本。函数无法修改实参。结果,即可将const对象传递给const形参,也可传递给非const形参。
因此,值得注意的是,有const引用形参的函数与有非const引用形参的函数是不同的。类似地,如果函数带有指向const类型的指针形参,则与带有指向相同类型的非const对象的指针形参的函数不相同。
8.实参类型转换:等级降序如下:
1)精确匹配
2)类型提升
3)标准转换
4)类类型转换
9.typedef bool (*fn)(const string&, const string&);
该定义表示fn是一种指向函数的指针类型的名字,该指针类型为“指向返回bool类型并带有两个conststring引用形参的函