C++88个注意点子之31~40
来源:互联网 发布:地理信息平台软件 编辑:程序博客网 时间:2024/04/28 04:46
31.函数重载与重复声明的区别
1)若两函数形参表完全相同,且函数名也相同,但是返回类型不同,则这样的重载方式错误!!!在java中函数名和形参表组成一个函数签名,与返回值无关,重载只与函数签名有关。在这点上C++和java是一致的。
2)仅仅基于不同返回类型,不能实现重载,会报错。
3)默认实参不同不能重载
4)const形参要注意,若两函数,一个是普通引用或指针,一个是const引用或const指针形参,则可以重载。注意如果是一般的const变量做形参则不能引起重载,因为这样是完全没有意义的。为什么这么说呢?请看下面一个例子:
void f(const int a);
void f(int a);
当我将变量传给这两个函数时,不管函数内部怎么处理,我的变量值不会发生变化,因为是赋值传递。
32. 函数的作用域也要注意,函数内部局部的变量名或函数名会屏蔽相同名字的函数与变量。
33.函数重载的确定过程:
1)看有无最佳匹配
过程是:找候选函数 --> 确定可行函数 --> 寻找最佳参数匹配函数(确保无精度损失)
2)若无匹配函数,则发生错误
3)多个实参匹配函数,但无最佳选择时报错
34. 形参为enum枚举类型时,只有enum类型才能传入,int型不行,相反,如果形参是int型的,传入enum类型则可以,自动将enum类型提升为int类型。
35. 仅当形参是引用或指针时,形参是否为const才有影响。
36. 1)声明指向函数的指针,bool (*pf)(const string &)。*pf加括号是必须的,不然是声明函数。
2)在引用函数名但又没有调用该函数时,函数名将被自动解释为指向函数的指针。
3)直接引用函数名等效于在函数名上面应用取地址操作符。
如:cmpFunc pf1 = lengthCompare;
cmpFunc pf2 = &lengthCompare;
pf1 和pf2的值都是一样的。也许你会感到惊讶,其实这种规则我们早就见过了,在定义指向数组首地址的指针时,
int *pf1 = a; //a[10]
int *pf2 = &a;
pf1与pf2也是一样的。
37. 函数指针形参
可以将一个函数指针作为某个函数的形参。虽然用的比较少,但是了解一下还是有好处的。
void useBigger(const int a, bool (*p)(const string &));
38. 返回指向函数的指针
int (*ff(int a))(int *, int);
ff(int a)函数返回int (*p)(int*, int)指针的表达方式。
这样表达是非常难看的。
我们可以用typedef来简化一下。
typedef int (*pF)(int *, int);
pF ff(int);
如果你看了前面我们对typedef的论述,你一定不会有疑惑。
39. C++允许使用函数指针指向重载的函数。
但指针的类型必须与重载函数的一个版本精确匹配。
40. IO标准库类型和头文件。
我们最常用的就是标准输入输出流了,cin 和cout。这里我们来看一下各种流的类类型。如cin就是istream类型,cout就是ostream类型。
还有其他文件IO流类型,下面我们来看一下各种类型相关性(继承关系)。
这是官方文档上面的继承关系图,这样看一目了然。如果你有兴趣可以深入源代码去看一下。
- C++88个注意点子之31~40
- C++88个注意点子之71~88
- C++88个注意点子之6~10
- C++88个注意点子之11~20
- C++88个注意点子之21~30
- C++88个注意点子之41~50
- C++88个注意点子之51~70
- 点子
- 想到好几个点子,也就是需求分析?
- C++88个注意点之1~5
- 运维之shell篇-----5.20-40例shell点子脚本
- flickr之我们心中的点子
- 10个妙点子送你一天好心情
- 25个增加linux服务器安全的点子
- 我有个的点子,有关企业移动办公的
- Objective-C之注意点(一)
- 混合开发之(C-OC)注意点
- c语言之指针调用注意
- 生成excel文件
- 到底EJB是什么
- android多渠道打包工具
- iOS layer层与优化(界面卡顿)
- 多线程 同步与死锁
- C++88个注意点子之31~40
- Xcode 给建好的项目添加Git
- Android第三方开源对话消息提示框:SweetAlertDialog(sweet-alert-dialog)
- maven scope含义的说明
- 讲excel表插入oracle时出现的一些错误,以及解决方法
- BootstrapOffCanves
- GitBash 下如何解决javac/java编译运行乱码问题
- Eclipse NDK 开发Unresolved inclusion:<jni.h>
- scala 下划线解析报错