explicit作用:

在C++中,explicit关键字用来修饰类的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换,只能以显示的方式进行类型转换。

explicit使用注意事项:

*

explicit 关键字只能用于类内部的构造函数声明上。

*

explicit 关键字作用于单个参数的构造函数。

* 在C++中,explicit关键字用来修饰类的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换

例子:

未加explicit时的隐式类型转换

1. class Circle

2. {

3. public:

4.     Circle(double r) : R(r) {}

5.     Circle(int x, int y = 0) : X(x), Y(y)
{}

6.     Circle(const Circle& c) : R(c.R),
X(c.X), Y(c.Y) {}

7. private:

8.     double R;

9.     int    X;

10.     int    Y;

11. };

12.

13. int _tmain(int argc, _TCHAR* argv[])

14. {

15. //发生隐式类型转换

16. //编译器会将它变成如下代码

17. //tmp = Circle(1.23)

18. //Circle A(tmp);

19. //tmp.~Circle();

20.     Circle A = 1.23;

21. //注意是int型的,调用的是Circle(int x, int y = 0)

22. //它虽然有2个参数,但后一个有默认值,任然能发生隐式转换

23.     Circle B = 123;

24. //这个算隐式调用了拷贝构造函数

25.     Circle C = A;

26.

27.     return 0;

28. }

加了explicit关键字后,可防止以上隐式类型转换发生

1. class Circle

2. {

3. public:

4.     explicit Circle(double r) : R(r)
{}

5.     explicit Circle(int x, int y = 0) :
X(x), Y(y) {}

6.     explicit Circle(const Circle& c) :
R(c.R), X(c.X), Y(c.Y) {}

7. private:

8.     double R;

9.     int    X;

10.     int    Y;

11. };

12.

13. int _tmain(int argc, _TCHAR* argv[])

14. {

15. //一下3句,都会报错

16.     //Circle A = 1.23;

17.     //Circle B = 123;

18.     //Circle C = A;

19.

20. //只能用显示的方式调用了

21. //未给拷贝构造函数加explicit之前可以这样

22.          Circle A =
Circle(1.23);

23.         Circle B =
Circle(123);

24.         Circle C =
A;

25.

26. //给拷贝构造函数加了explicit后只能这样了

27.          Circle
A(1.23);

28.         Circle
B(123);

29.         Circle
C(A);

30.     return 0;

31. }

时间: 2024-12-29 10:47:06

explicit作用:的相关文章

85.explicit作用

1 #include <iostream> 2 using namespace std; 3 4 class myclass 5 { 6 public: 7 int num; 8 public: 9 explicit myclass(int data) :num(data) 10 { 11 12 } 13 }; 14 15 void main() 16 { 17 //没有explicit,代码歧义多,可以解释为构造,也可以解释为转换 18 //explicit限定自动转换,可以强制转换,加了e

[转]C++ explicit的作用

explicit作用: 在C++中,explicit关键字用来修饰类的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换,只能以显示的方式进行类型转换. explicit使用注意事项: * explicit 关键字只能用于类内部的构造函数声明上. * explicit 关键字作用于单个参数的构造函数. * 在C++中,explicit关键字用来修饰类的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换 例子: 未加explicit时的隐式类型转换 1. class Circle 

C++ explicit的作用

来源:http://www.cnblogs.com/this-543273659/archive/2011/08/02/2124596.html explicit作用: 在C++中,explicit关键字用来修饰类的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换,只能以显示的方式进行类型转换. explicit使用注意事项: * explicit 关键字只能用于类内部的构造函数声明上. * explicit 关键字作用于单个参数的构造函数. * 在C++中,explicit关键字用来

C++中的explicit关键字的用法

一.explicit作用: 在C++中,explicit关键字用来修饰类的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换,只能以显示的方式进行类型转换. 二.explicit使用注意事项: explicit 关键字只能用于类内部的构造函数声明上. explicit 关键字作用于单个参数的构造函数. 在C++中,explicit关键字用来修饰类的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换 参考博客:http://www.cnblogs.com/this-54327365

C++中 explicit 关键字

阅读了 effective c++中关于初始化部分知识,其中提到了explicit关键字 explicit作用: 防止构造函数执行隐式类型转换 要明白它的作用,首先要了解隐式转换: 我们来构造一个隐式调用 方法:可以用单个实参来调用的构造函数定义了从形参类型到该类类型的一个隐式转换. 例如: <span style="font-size:18px;">class B{ public: B(int x); void dosomething(B bobject); }</

语言基础(6):关键字explicit

C++中 explicit 被用来修饰只有一个参数的构造函数,作用是调用该构造函数必须是显示的, 跟它相对应的单词是 implicit(隐含的.不言明的),类构造函数默认情况下即声明为 implicit (因此C++没有此关键字). 如果不使用该关键字,调用只有一个参数的构造函数允许通过缺省的转换操作完成,过程分为两步: 将该构造函数参数对应数据类型的数据转换为该类对象: 然后调用复制构造函数来实现构造对象: 通过一个例子来说明 explicit 作用: class String{ ??????

利用VBA把PowerDesigner的comment复制到name

代码如下: Option Explicit '------------------------------------------------------------------------------- '作用:PowerDesigner物理模型复制comment到name ' '作者: 王国狮 ' '时间: 2015-12-18 ' '版本: V1.0 ' '注意:如果name有值,将会覆盖:可以重复执行,不会多次复制 '-----------------------------------

利用VBA把PowerDesigner的name复制到comment

代码如下: Option Explicit '------------------------------------------------------------------------------- '作用:PowerDesigner物理模型复制name到comment ' '作者: Lio5n '时间: 2015-12-18 ' '版本: V1.0 ' '说明:如果comment有值,不会覆盖:可以重复执行,不会多次复制 '--------------------------------

C++中explicit关键字的作用

转自:http://www.cnblogs.com/winnersun/archive/2011/07/16/2108440.html explicit用来防止由构造函数定义的隐式转换. 要明白它的作用,首先要了解隐式转换:可以用单个实参来调用的构造函数定义了从形参类型到该类类型的一个隐式转换. 例如: class things{ public: things(const std::string&name =""): m_name(name),height(0),weight(