cpp primer 接 plus第七章

6.4 函数重载

重载函数:函数名相同函数形参不同。

定义重载函数:

不允许两个重载函数返回值类型不同,其余相同。

一个拥有顶层const的形参无法与没有顶层const形参的重载函数区分开来。

6.4.1 重载与作用域

如果在内层作用域中声明名字,它将隐藏外层作用域中声明的实体。

string read();
void print(const string &);
void print(double);
void fooBar(int ival)
{
    bool read = false;
    string s = read();
    void print(int); //新作用域,隐藏了之前的print
    print("Value: ");
    print(ival);
    print(3.14); //合法,调用print(int); print(double)被隐藏掉了。
}

6.5 特殊用途语言特性

6.5.1 默认实参

typedef string::size_type sz;
string screen(sz ht = 24,sz wid = 80,char backgrnd = ' ');
//为每一个形参提供了默认实参
string window;
window = screen(); //默认实参
window = screen(66); //screen(66,80,' ');//以此类推

多次声明一个函数也是合法的,但是在给定的作用域中一个形参只能被赋予一次默认实参。

6.5.2 内联函数和constexpr函数

使用函数存在一个潜在的缺点:调用函数一般比求等价表达式的值要更慢一些。

内联函数可以避免函数调用的开销。

在函数类型前面加上inline,这样就可以将他声明为内联函数。

inline const string &
shorterString(const string &s1, const string &s2)
{
    return s1.size() <= s2.size() ? s1 : s2;
}

6.6 函数匹配

寻找最佳匹配

void f();
void f(int);
void f(int,int);
void f(double,double = 3.14);
f(5.6);
f(34,2.56);

在此例子中选择f(double,double = 3.14),此函数与实参精确匹配。第一个形参为5.6,第二个为默认实参。

采用f(34,2.56)时,编译器会因为这个调用具有二义性而拒绝其要求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值