C++ 的explicit关键字
来源:互联网 发布:学生值得买的东西知乎 编辑:程序博客网 时间:2024/05/04 04:01
带单一参数的构造函数在缺省情况下隐含一个转换操作符,请看下面的代码:
class C {
int i;
//...
public:
C(int i); //constructor and implicit conversion operator
//as well
};
void f() {
C c(0);
c = 5; //将 5 隐式转换为 C 对象,然后赋值
}
编译器重新编辑上述例子代码,如下:
//////////////////////////////////////////////////////////////////////////////////////////
//"c=5;" 被编译器转换成下面这个样子:
/////////////////////////////////////////////////////////////////////////////////////////
C temp(5);// 实例化一个临时对象,
c = temp; // 用 = 赋值
temp.C::~C(); // temp 的析构函数被激活
在很多情况下,这个转换是有意的,并且是正当的。但有时我们不希望进行这种自动的转换,例如:
class String {
int size;
char *p;
//..
public:
String (int sz); //这里不希望进行隐式转换操作
};
void f ()
{
String s(10);
// 下面发生一个意想不到的转换:
s = 100; // 糟糕,100 被转换为一个 String,然后被赋值给 s
}
为了避免这样的隐式转换,应该象下面这样显式声明该带单一参数的构造函数:
class String {
int size;
char *p;
//..
public:
explicit String (int sz); // 需显示转换的构造函数
String (const char *s, int size n = 0); // 隐式转换的构造函数
};
void f ()
{
String s(10);
s = 100; // 现在编译时出错;采用有exlocit关键字的构造函数,需要显式转换:
s = String(100); // 采用有exlocit关键字的构造函数,显式转换
s = "st"; // 采用没有explicit关键字的构造函数,此时允许隐式转换
}
class C {
int i;
//...
public:
//as well
};
void f() {
C c(0);
c = 5; //将 5 隐式转换为 C 对象,然后赋值
}
编译器重新编辑上述例子代码,如下:
//////////////////////////////////////////////////////////////////////////////////////////
//"c=5;" 被编译器转换成下面这个样子:
/////////////////////////////////////////////////////////////////////////////////////////
C temp(5);// 实例化一个临时对象,
c = temp; // 用 = 赋值
temp.C::~C(); // temp 的析构函数被激活
在很多情况下,这个转换是有意的,并且是正当的。但有时我们不希望进行这种自动的转换,例如:
class String {
int size;
char *p;
//..
public:
};
void f ()
{
}
为了避免这样的隐式转换,应该象下面这样显式声明该带单一参数的构造函数:
class String {
int size;
char *p;
//..
public:
};
void f ()
{
}
- C++:explicit 关键字
- C++explicit关键字
- 【C++】explicit关键字
- C++explicit关键字
- 【C++】explicit关键字
- 【C++】explicit关键字
- 【C++】explicit关键字
- explicit关键字的使用
- explicit 关键字的使用
- C++ 的explicit关键字
- C++的explicit关键字
- explicit关键字的用途
- explicit关键字的使用...
- 关键字explicit的作用
- C++的explicit关键字
- C++的explicit关键字
- C++的explicit关键字
- explicit 关键字的用法
- 管理学案例
- 一篇好文,以在迷茫时阅读
- 检测到有潜在危险的 Request.Form
- zend framework 日記 2008/11/19
- 各硬件装置在 Linux 中的代号
- C++ 的explicit关键字
- amcharts java另存图(servlet)
- 推荐几个免费的SVN空间,免费项目托管,免费代码托管
- 失业七个月,面试六十家公司的深圳体验
- 初秋有点冷
- 线程、同步与锁——Mutex想说爱你不容易
- Lua使用者
- ImageButton 使用
- zend framework 日記 2008/11/19 (虚拟主机配置-轉)