Peanut's Book Shelf » 日志 » C++ Primer chap7 函数
C++ Primer chap7 函数
QQJIE 发表于 2006-08-12 10:33:34
函数不能返回另一个函数或者内置数组类型,但可以返回指向函数的指针或者指向数组的指针。
c++是一种静态强类型语言,对于每一次函数调用,编译器都会检查其形参。
解释:c++中,操作是否合法是否在编译时检查的。当编写表达式时,编译器检查表达式中的对象
是否按该对象的类型定义的方式使用。如果不是将不产生可执行文件。
静态类型检查使得编译器必须能识别程序中的每个实体的类型,因此,程序中使用变量前必须先定义变量的类型。
//Suprize
void fcn(const int i)
void fcn(int i )
//以上的声明将导致出错,redefinition
若形参为非const引用,则不能将常数作为实参。
传递迭代器比传递容器本身更好。
变体忽略任何其数组形参指定的长度。
//只要传过去的是同类型指针就可以。
**如果想严格的控制传过去的数组,可以用数组的引用
void printfValues(int (&arr[10]));
这个函数只严格的接受10元素数组为参数。
return void返回值是可以的。
老生常谈:不要返回局部变量的引用
*返回引用的函数可以做左值。为避免这种情况出现,可以改为返回const引用。
static局部对象,确保不迟于程序执行流程第一次经过该对象的定义语句时进行初始化。不早于程序结束前撤销。
内联函数应在头文件定义。因为它必须在调用点被展开,所以仅有函数原型是不够的。
类的成员函数可以访问类的private成员。
因此,以下语句是正确的
bool A::same_isbn(const A& rhs ) const
{
return isbn == rhs.isbn;
}
const对象仅能调用const方法。试图调用非const方法是错误的。
构造函数初始化列表中的初始化顺序是变量定义的顺序。
任何程序都仅有一个main函数的实例。main函数不能被重载。
仅有参数是否const的不同不能形成重载。
c++函数作用域:
void print(const string&);
void print(double);
void foobar(int ival)
{
void print(int); //这个声明hide掉了作用域外的所有print声明。
print("Value: " ); //Error! hidden.
print(ival); // ok
print(3.14); // ok,uses print(int) version
}
//c++中名字查找在类型判断之前。
确定具体重载函数:寻求最优匹配。
含有多个形参的重载确定:如果有且仅有一个函数满足下列条件,则匹配成功
1)其每个实参的匹配都不劣于其它可行函数需要的匹配
2)至少有一个实参的匹配优于其它可行函数提供的匹配
如果检查了所有实参后,仍找不到惟一最佳匹配函数,则该调用出错。
实参类型转换(确定最优匹配)
1)精确匹配(exact match):类型相同
2)通过类型提升(promotion)实现的匹配。
3)通过标准转换实现的匹配(standard conversion)
4)通过类类型转换实现的匹配(classtype conversion)
**仅当形参是const指针或引用时,const与否才有影响。
注意不能以指针本身是否为const来实现函数重载
f(int*)
f(int* const)
都复制了指针,没用。
函数指针:
类似
bool (*)()
指向不同函数类型的指针之间不存在转换。
指针的类型必须和重载函数的一个版本精确匹配。
