首页 > 技术文章 > 《C++ Primer Plus 6th》读书笔记 - 第8章 函数探幽

Azurewing 2014-12-04 19:53 原文

1. 摘录

默认参数指的是当函数调用中省略了实参时自动使用的一个值。

默认参数并非编程方面的重大突破,而只是提供了一种便捷的方式。使用默认参数,可以减少要定义的析构函数、方法以及方法重载的数量。

试图在同一个文件(或转换单元)中使用同一种类型的显式实例显式具体化将出错。

2. 最佳函数匹配

完全匹配 > 提升转换 > 标准转换 > 用户定义的转换

通常有两个函数完全匹配是错误的,但有两个例外。

  • const和非const之间的区别只适用于指针和引用指向的数据
  • 非模板函数将优于模板函数
  • 在都是模板函数的情况下,较具体的模板函数优先

3. 关键字decltype

1 template<class T1, class T2>
2 void ft(T1 x, T2 y)
3 {
4     decltype(x + y) xpy = x + y; // make xpy the same type as x + y
5 }

为了判断一下语句,编译器必须遍历一个核对表

1 decltype(expression) var;

STEP1. 如果expression是一个没有用括号括起的标识符,则var的类型与该标识符的类型相同,包括const等限定符。

STEP2. 如果expression是一个函数调用,则var的类型与函数的返回类型相同。 (并不实际调用函数)

STEP3. 如果expression是一个左值,则var为指向其类型的引用。

STEP4. 如果前面的条件都不满足,则var的类型与expression的类型相同。

4. C++11后置返回类型

1 template<class T1, class T2>
2 auto h(int x, float y) -> double
3 {/* function body */}

 

推荐阅读