c++ Primer 第六章不熟悉知识点总结

一、分离式编译

分离式编译允许我们把程序分割到几个文件中去,每个文件独立编译。

-c和-o都是gcc编译器的可选参数。-c表示只编译(compile)源文件但不链接,会把.c或.cc的c源程序编译成目标文件,一般是.o文件。-o用于指定输出(out)文件名。不用-o的话,一般会在当前文件夹下生成默认的a.out文件作为可执行程序。

二、(1)使用引用参数,当我们的参数很大或者根本无法拷贝时(因为值参数需要将实参拷贝给形参)使用引用参数就很好的解决了这个问题,并且尽量去使用引用参数而不是指针参数。

(2)使用形参返回额外信息

  其实就是在函数多加了一个形参,因为可以直接利用引用参数改变实参的值,所以在函数中我们可以把引用参数的值改变以达到改变实参的值。而获得函数中想要得到的值。

 1 int Temp(int &count, string &s)
 2 {
 3     auto temp = s.size();
 4     for (size_t i = 0; i != temp; i++)
 5     {
 6         s[i] = 'F';
 7         count++;
 8     }
 9     return count;
10 }

从这个函数中我们可以得到count的值和s的值。

(3)、尽量使用常量引用,来避免一些不必要的错误。

三、数组作为形参的时候,其实编译器把数组转化成了指针。数组也可以作为引用形参,但是应该注意是 sum(int (&temp)[5]){} ,而不是int &temp[5].

四、含有可变形参的函数

(1)、initializer_list形参

  如何函数的实参数量未知,而实参的数据类型相同,我们就可以用initializer_list。initializer_list定义在同名的头文件中。和vector一样,initializer_list也是一个模板,不一样的是initializer_list的元素永远是常量值。我们无法改变他的对象中元素的值。如果我们编写一个输出错误信息的函数:

1 err_msg(initializer_list <string> msg)
2 {
3     auto temp = msg.begin();
4     while(msg.end != temp)
5    {
6         cout << *temp << endl;
7         ++temp;
8    }
9 }

补充一点在for循环中的条件中,不管是++i还是i++,其结果都是一样的,而我们一般为了性能选择++i。因为i++会复制i的副本。

五、返回类型和return语句

return语句终止当前正在执行的函数并返回到调用该函数的后面。

列表初始化返回值

 1 vector<string> msg()
 2 {
 3     if(expected.empty())
 4     {
 5          return {};
 6     }else
 7     {
 8          return {"functionX", expected};
 9     }
10 }

六、重载和顶层const

一个拥有顶层const的形参无法和一个不含const区分开来

int function(int const temp){}
int function(int temp){}

 七、内联函数

在我们定义的一个小、精简函数前面加一个inline,就变成了内联函数,内联函数可以优化我们的代码,避免函数调用的开销。注意的是很多编译器都不支持内联函数的递归。和其他函数不一样的是,内联函数一般定义在头文件中。

inline const bool &result(string parameter1, string parameter2)
{
    return parameter1 > parameter2 ? true : false;
}

 

转载于:https://www.cnblogs.com/xiaodangxiansheng/p/11380923.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值