[2018年4月20号]C++ primer 课后练习 第六章 函数

6.36  string (*func(int i))[10]

#include <iostream>
#include <vector>
using namespace std;

static string str[10] = {"0","1","2","3","4","5","6","7","8","9"};

string (*func(int i))[10]{
    return &str;
}

int main() { 
    string (*strP)[10] = func(10);
    for(size_t i = 0 ; i < 10 ; i ++){
        cout<<((*strP)[i]).c_str()<<endl;
    }
    for(;;);
    return 0;
} 

6.37:

typedef:

typedef string strTypedef[10];

strTypedef *func(int i) {
    return &str;
}

后置

auto func(int i)->string(*)[10]{
    return &str;
}

decltype

decltype(&str) func(int i){
    return &str;
}

  个人喜欢后置型,可以不关注函数的整体结构,就可以清晰的了解返回值的类型

6.38


decltype(str) &arrPtr() {
    return str;
}
string (&strP)[10] = arrPtr();

6.39

a:第二条声明函数的参数列表为顶层const,与第一条重复

b.仅仅是返回类型不同,无法表示重载

c.正确,

第一条传入int指针,返回int指针

第二条传入double指针,返回double指针

6.40

b是错误的,当形参被赋予默认实参时,该形参的右侧形参也必须有默认实参

6.41

a.是非法的,函数参数列表中并非所有参数都有默认实参,第一个参数必须传入

b.正确

c.与语义不符,'*'会默认转换成int整形传入,虽不非法,但不符合初衷

6.42

string make_plural(size_t ctr, const string& word = "s", const string& end = "") {
    return (ctr>1)? word+end:word;
}

6.43

a的声明和定义都放头文件

b则拆开

6.44

inline bool
isShorter(const string& s1, const string& s2){
    return s1.size()> s2.size();
}

6.45,当函数为规模较小,流程直接,频繁调用的情况时,可改写成内联函数

6.46.当传入参数为常量表达式时,可以改写



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值