C++ 抑制构造函数定义的隐式转换
来源:互联网 发布:spss如何分析数据 编辑:程序博客网 时间:2024/05/16 12:14
参考:《C++ Primer》 P256
构造函数添加explicit关键字修饰
例子
class StrBlob{public: typedef std::vector<std::string>::size_type size_type; StrBlob(); //StrBlob(std::initializer_list<std::string> il); explicit StrBlob(std::initializer_list<std::string> il); size_type size() const{ return data->size(); } bool empty() const{ return data->empty(); } void push_back(const std::string &str){ data->push_back(str); } void pop_back(); std::string & front(); /* 如果定义const StrBlob 对象,则front函数应该对const进行重载,因为如果不重载,则const StrBlob 常量对象的this指针, 不能传给函数front的非常量的this指针,从而无法访问data数据成员,同时返回的元素类型也应该是const,因为const StrBlob 为常量对象 */ const std::string & front() const; std::string & back(); const std::string &back() const;private: std::shared_ptr<std::vector<std::string>> data; void check(size_type i, const std::string &msg) const;};StrBlob b1; for (size_t i = 0; i < 1; i++) { //StrBlob b2 = StrBlob({"a", "an", "the" }); StrBlob b2 = { "a", "an", "the" }; cout << b2.size()<<endl; b1 = b2; b2.push_back("about"); } cout << b1.size() << endl;
当使用构造函数StrBlob(std::initializer_list il)时,初始化StrBlob的对象既可以执行直接初始化:StrBlob b2{ “a”, “an”, “the” };又可以执行拷贝形式的初始化:StrBlob b2 = { “a”, “an”, “the” };
当使用构造函数explicit StrBlob(std::initializer_list il)时,只能执行直接初始化:StrBlob b2{ “a”, “an”, “the” },因为explicit作用,初始化列表类型{ “a”, “an”, “the” }不能隐式转换为StrBlob类型; 但是可以StrBlob b2 = StrBlob({“a”, “an”, “the” })初始化;
0 0
- C++ 抑制构造函数定义的隐式转换
- 读书笔记--抑制构造函数定义隐式转换
- 【C++基础之十七】抑制由构造函数定义的隐式转换
- c++:explicit 抑制构造函数隐式转换
- C++类中,explicit构造函数,抑制隐式转换
- C/C++日常学习总结(第十二篇)将构造函数声明为explicit(显式)的方式可以抑制隐式转换
- explicit只对构造函数起作用,用来抑制隐式转换
- explicit 只对构造函数起作用,用来抑制隐式转换
- C++中的explicit关键字 抑制隐式转换构造
- (转)C++笔记(1)explicit 只对构造函数起作用,用来抑制隐式转换。
- More Effective C++----(4)避免无用的缺省构造函数 & (5)谨慎定义类型转换函数
- (C++)定义类的拷贝构造函数
- c++-转换构造函数
- 【c/c++】转换构造函数
- 【c++】实验说明“转换构造函数”是如何转换的
- 单参数的构造函数带来的隐式转换
- 默认构造函数,隐式类型转换,复制构造函数
- 转换构造函数和隐式构造函数
- 设计模式---行为类型---访问者
- 迭代器iterator原理和设计模式
- redis 数据类型——Hash SortedSet List
- linux初次学习总结
- for循环的基本应用 嵌套循环 do while循环 和while循环的区别 面试题
- C++ 抑制构造函数定义的隐式转换
- 单元测试 知识小结
- SAS 9.4 SID 更新
- 装饰模式
- C++指针未初始化和编译器优化造成的奇怪的程序崩溃
- 配置Log4j(很详细)
- UVa 11806
- 版本控制 小结
- 研究如何去掉eclipse中 光标 通过某类名的自动提示