请教一个c++构造函数里面使用引用的问题

qq_41065261 2018-03-12 06:27:42
在C++ Primer中文版第5版237页关于构造函数有下面的代码:

struct Sales_data{
//新增的构造函数
Sales_data() =default;
Sales_data(const std::string &s) :bookNo(s){} //为什么要用引用?
Sales_data(const std::string &s, unsigned n, double p): //为什么第2和第3个参数不用引用?有什么区别?
bookNo(s), units_sold(n),revenue(p*n) {}
...
}


想请问一下第三个构造函数 为什么const std::string &s 要使用引用,我试过不加引用也可以,加引用和不加引用有什么区别呢?
...全文
530 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
mstlq 2018-03-12
  • 打赏
  • 举报
回复
建议搜索Effective C++ 第20条 或者参考 http://blog.csdn.net/cqk0100/article/details/72897504
codedoctor 2018-03-12
  • 打赏
  • 举报
回复
对不容易确定大小但又不想传入之后被修改的对象,比如:vector、string等数据,一般加上const引用,用引用传参的方式避免不必要的拷贝构造导致的内存和cpu支出,cosnt的限定也保证了传入的参数不会被修改。 对于int、double等简单类型,则一般使用传形参的方式,因为其大小较小而且确定,所以为了方便和保护传入的参数不被修改,一般都直接采用传形参
zilaishuichina 2018-03-12
  • 打赏
  • 举报
回复
当参数传递的是对象的时候, 如果可以传引用,就传引用,减少不必要的拷贝构造的开销, 而基本数据类型,就没有这个必要
薛悖 2018-03-12
  • 打赏
  • 举报
回复
& 的目的是引用,避免再复制一个std::string const 是为了限定它只读 const string s 的话还是要再复制一次岂不是很浪费,既然已经是只读了为啥不直接用引用。

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧