隐式类类型转换以及explicit
2012-09-03 09:08
274 查看
先有如下构造函数版本:
class Sales_item{
public:
Sales_item(const std::string &book): isbn(book),units_sold(0),revenue(0.0){}
Sales_item(std::istream &is);
}
原本的成员函数same_isbn()接收一个Sales_item对象作为实参,判断两个对象是否对应的是同一本书。
但是 String null_book="9-99-9999"
item.same_isbn(null_book);也是成立的,因为进行了隐式的类类型转换,使用string类型的null_book(通过默认构造函数)创建了一个临时的对象,然后用该临时对象作为参数传递给same_isbn()函数。
以上这种就成为类类型的隐式转换。可以通过explicit标识来防止进行隐式类类型转换。
class Sales_item{
public:
explicit Sales_item(const std::string &book): isbn(book),units_sold(0),revenue(0.0){}
explicit Sales_item(std::istream &is);//注意explicit只能出现在类型的申明中,在之后类外进行定义时,
explicit关键字不能够再出现。
}
如此一来,item.same_isbn(null_book)将是错误的。
class Sales_item{
public:
Sales_item(const std::string &book): isbn(book),units_sold(0),revenue(0.0){}
Sales_item(std::istream &is);
}
原本的成员函数same_isbn()接收一个Sales_item对象作为实参,判断两个对象是否对应的是同一本书。
但是 String null_book="9-99-9999"
item.same_isbn(null_book);也是成立的,因为进行了隐式的类类型转换,使用string类型的null_book(通过默认构造函数)创建了一个临时的对象,然后用该临时对象作为参数传递给same_isbn()函数。
以上这种就成为类类型的隐式转换。可以通过explicit标识来防止进行隐式类类型转换。
class Sales_item{
public:
explicit Sales_item(const std::string &book): isbn(book),units_sold(0),revenue(0.0){}
explicit Sales_item(std::istream &is);//注意explicit只能出现在类型的申明中,在之后类外进行定义时,
explicit关键字不能够再出现。
}
如此一来,item.same_isbn(null_book)将是错误的。
相关文章推荐
- c#自定义类型的转换方式operator,以及implicit(隐式)和explicit (显示)声明的区别
- c#自定义类型的转换方式operator,以及implicit(隐式)和explicit (显示)声明的区别
- c#自定义类型的转换方式operator,以及implicit(隐式)和explicit (显示)声明的区别
- C++12.4.4 隐式类类型转换----explicit
- c++中的explicit关键字及隐式类型转换
- c++中的explicit关键字及隐式类型转换
- c++隐式类型转换和explicit
- explicit:C++规定,当定义了只有一个参数的构造函数时,同时也定义了一种隐式的类型转换
- c++的转换构造函数和杜绝隐式类型转换的explicit关键字
- 隐式类型转换和explicit关键字的作用
- 隐式类型转换和explicit关键字的作用
- C++隐式的类类型转换,explicit关键字介绍。
- c++中的explicit关键字及隐式类型转换
- C++的类类型隐式转换与explicit关键字
- c++中的explicit关键字及隐式类型转换
- explicit 隐式类类型转换
- 从Qt谈到C++(一):关键字explicit与隐式类型转换
- 对象类型转换,explicit,显式和隐式
- 带有一个参数的构造函数的隐式类型转换和explicit 关键字
- 数据类型,隐式转换以及json,对象,引用类型,预解析 视频教程