1. const_cast和重载
const string sumLength(const string &s1, const string &s2)
{
return s1;
}
string &sumLength(string &s1, string &s2)
{
auto &r = sumLength(const_cast<const string&>(s1), const_cast<const string&>(s2));
return const_cast<string&>(r);
}
2. 重载与作用域
在C++当中,名字查找在类型检查之前进行
string read();
void print(const string &);
void print(double);
void fooBar(int ival)
{
bool read = false; // 新作用域:隐藏了外层的read
string s = read; // 错误: read是一个布尔值,而非函数
// 为了给大家演示作用域,使用一个局部声明的函数,该写法并不鼓励
void print(int val){ std::cout << val << std::endl; }; // 新作用域:隐藏了之前的print
print("Value: "); // 错误:print(const string &)被隐藏掉了
print(ival); // 正确: 当前print(int)可见
print(3.14); // 正确:调用print(int); print(double)被隐藏掉了
}
3. 默认实参
可以这样:
string s(sz, sz, char = ‘’);
string s(sz = 9, sz=8, char);
4. 内联函数可避免函数调用的开销
5. constexpr函数
- 指能用于常量表达式的函数
- 函数的返回类型和所有形参的类型都得是字面值类型
- 被隐式地指定为内联函数。
constexpr int n(){return 2;}