博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Effective C++ item 5
阅读量:3575 次
发布时间:2019-05-20

本文共 927 字,大约阅读时间需要 3 分钟。

条款5 :了解C++默默编写调用了那些函数

calss A{	public:	A() = default; //empty 类会自动创建,显示声明构造时,编译器不会自动添加	A(std::string a,std::string b){}  	private:	std::string aa;	std::string bb; };int main(){	A a("abc","123"); // ok	std::string _a = "123";	std::string _b = "abc";	A b(_a,_b); //ok	A c(); //ok}

当类中成员变量为non-reference或者non-const时,构造函数参数接受左值和右值,函数体内可通过赋值传给成员变量。同理copy-construct和assignment。

class A{	public:	A() = default;;	A(std::string a,std::string b):aa(a),bb(b){}	private;	std::string & aa;	const std::string bb;};int main(){	A a("123","12345"); //ok,but a.aa  no initialization success	-----------------------------------------------------------	std::string a = "123";	std::string b = "345";	A b(a,b); // ok	a = "qweer";	b;//b.aa no value}

当类中成员变量为引用类型或const时,必须使用初始化列表进行初始化,但是构造中的参数,引用时必须传入左值才能正确赋值否则为空,而const变量接受左值和右值。注意的时,当使用左值传入参数时,a的值修改之后,b中aa会为空。

将构造函数改成:

A(std::string& a,std::string b):aa(a),bb(b){}

这样上述问题将不不会存在,外部变量a的改变不会使得b.aa为空。

转载地址:http://tcxgj.baihongyu.com/

你可能感兴趣的文章
hibernate抓取策略(关联级别的延迟加载)
查看>>
DNS_PROBE_FINISHED_NXDOMAIN
查看>>
dom4j解析节点元素的crud和xpath
查看>>
初识Struts
查看>>
多线程打印A12Z34。。。
查看>>
strutsc踩过的坑
查看>>
maven安装和使用踩坑
查看>>
第一次紧张刺激的面试
查看>>
咕泡笔记导读篇
查看>>
eclipse安装maven和简单使用
查看>>
关于交往所思
查看>>
jdbc的封装
查看>>
数据库存入数据变为???
查看>>
实现数据库源的几种方式和开源数据源的使用
查看>>
元数据的获取和 数据库读写操作封装
查看>>
java文件的上传和下载(细节问题)
查看>>
DBUtils框架QueryRunner的 使用
查看>>
springMVC之controller笔记
查看>>
springmvc类型转换
查看>>
ai 的研究生院校
查看>>