C# 显式转换关键字 explicit】的更多相关文章

不同于隐式转换,显式转换运算符必须通过转换的方式来调用. 如果转换操作会导致异常或丢失信息,则应将其标记为 explicit. 这可阻止编译器静默调用可能产生意外后果的转换操作. 省略转换将导致编译时错误 CS0266. 该引用摘自:explicit(C# 参考) 显示转换关键字explicit能向阅读代码的每个人清楚地指示您要转换类型. 该引用摘自:使用转换运算符(C# 编程指南) 仍以Student为例,取语文和数学成绩的和,不使用explicit class Student { /// <…
C++提供了关键字explicit,可以阻止不应该允许的经过转换构造函数进行的隐式转换的发生.声明为explicit的构造函数不能在隐式转换中使用. C++中, 一个参数的构造函数(或者除了第一个参数外其余参数都有默认值的多参构造函数), 承担了两个角色. 1 是个构造器 ,2 是个默认且隐含的类型转换操作符. 所以, 有时候在我们写下如 AAA = XXX, 这样的代码, 且恰好XXX的类型正好是AAA单参数构造器的参数类型, 这时候编译器就自动调用这个构造器, 创建一个AAA的对象. 这样看…
转自 explicit 如果A类有某个构造函数的单个输入参数,是B类(包括基本数据类型)的对象或引用,则C++的编译器会在需要A类形参的函数调用中,自动调用该构造函数,将B类实参隐式地转换为A类实参. 这种自动类型转换的好处是,避免了定义函数的两个重载版本,代价是隐式调用构造函数会增加调用开销,并可能会带来其他问题. 在标准C++中,新增加了关键字explicit(显式/清楚/明确),(只能)用在带单个参数的构造函数前,告诉编译器,不能使用该构造函数进行隐式类型转换.如果确实想转换,则必须采用显…
今天在<C++ Standard Library>中看到 explicit 的作用,在这里做一下笔记,以备下次再次忘记该关键字的作用. By using the keyword explicit, you can prohibit a single argument constructor from defining an automatic type conversion. A typical example of the need for this feature is in a coll…
最近在复习QT,准备做项目了,QT Creator 默认生成的代码 explicit Dialog(QWidget *parent = 0)中,有这么一个关键字explicit,用来修饰构造函数.以前在Windows下写程序的时候,基本上没有碰到这个关键字,那么这个关键字是做什么用的呢? 关键字 explicit 可以禁止“单参数构造函数”被用于自动类型转换,主要用于 "修饰 "构造函数. 指明构造函数只能显示使用,目的是为了防止不必要的隐式转化. 光看这一句似乎不太容易明白,下面,举…
c/c++拷贝构造函数和关键字explicit 关键字explicit 修饰构造方法的关键字,加上了,就告诉编译器,不可以隐式初始化对象:不加就可以隐式初始化对象: 下面的代码是可以正常编译执行的,但是加了关键字explicit,编译就会错我,因为Test t = 100;是隐式初始化对象,但是如果加上强制类型转换后,就不会有错误了. 强制类型转换:Test t = (Test)100; class Test{ public: Test(int d):data(d){//explicit cou…
转载:果冻虾仁 提出疑问 当我们新建了一个Qt的widgets应用工程时.会自动生成一个框架,包含了几个文件. 其中有个mainwindow.h的头文件.就是你要操纵的UI主界面了.我们看看其中的一段代码: class MainWindow : public QMainWindow { Q_OBJECT//一个宏,暂不考虑 public: ); ~MainWindow(); private: Ui::MainWindow *ui; }; 这段代码定义了一个新的类MainWindow,继承自QMa…
关键字explicit,可以阻止不应该允许的经过转换构造函数进行的隐式转换的发生.声明为explicit的构造函数不能在隐式转换中使用. C++中, 一个参数的构造函数(或者除了第一个参数外其余参数都有默认值的多参构造函数), 承担了两个角色. 1 是个构造器 2 是个默认且隐含的类型转换操作符. 所以, 有时候在我们写下如 AAA = XXX, 这样的代码, 且恰好XXX的类型正好是AAA单参数构造器的参数类型, 这时候编译器就自动调用这个构造器, 创建一个AAA的对象. 这样看起来好象很酷,…
C++中的explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造函数是显示的, 而非隐式的, 跟它相对应的另一个关键字是implicit, 意思是隐藏的,类构造函数默认情况下即声明为implicit(隐式). 关于explicit关键字,先看看MSDN上的解释: This keyword is a declaration specifier that canonly be applied to in-class constructor declarations. An…
一.explicit和implicit explicit 关键字用于声明必须使用强制转换来调用的用户定义的类型转换运算符:implicit 关键字用于声明隐式的用户自定义的类型转换运算符. 总结来说:explicit和implicit都是用于用户自定义的类型转换运算符,explicit是显示转换,implicit是隐式转换. 二.explicit和Implicit的使用 我们建立一个时间段类,里面包含了时间段的开始时间和结束时间,而实际使用中,往往需要去获取这个时间段类的小时数.代码如下: //…
在C++中,explicit关键字用来修饰类的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换,只能以显示的方式进行类型转换. explicit使用注意事项: explicit 关键字只能用于类内部的构造函数声明上. explicit 关键字作用于单个参数的构造函数. 隐式转换:直接将一种类型赋值给另外一个类型: 例如:string strType = "123"; object objType=strType;//,隐式转换, 显示转换:数据先进行类型转换再进行赋值, 例如…
C++中, 一个参数的构造函数(或者除了第一个参数外其余参数都有默认值的多参构造函数), 承担了两个角色. 1 是个构造器 ,2 是个默认且隐含的类型转换操作符. 所以, 有时候在我们写下如 AAA = XXX, 这样的代码, 且恰好XXX的类型正好是AAA单参数构造器的参数类型, 这时候编译器就自动调用这个构造器, 创建一个AAA的对象. 这样看起来好象很酷, 很方便. 但在某些情况下(见下面权威的例子), 却违背了我们(程序员)的本意. 这时候就要在这个构造器前面加上explicit修饰,…
预测下面C++程序的输出: #include <iostream> using namespace std; class Complex { private: double real; double imag; public: // Default constructor Complex(double r = 0.0, double i = 0.0) : real(r), imag(i) {} // A method to compare two Complex numbers bool op…
C++中, 一个参数的构造函数(或者除了第一个参数外其余参数都有默认值的多参构造函数), 承担了两个角色. 1 是个构造器 ,2 是个默认且隐含的类型转换操作符. 所以, 有时候在我们写下如 AAA = XXX, 这样的代码, 且恰好XXX的类型正好是AAA单参数构造器的参数类型, 这时候编译器就自动调用这个构造器, 创建一个AAA的对象. 这样看起来好象很酷, 很方便. 但在某些情况下(见下面权威的例子), 却违背了我们(程序员)的本意. 这时候就要在这个构造器前面加上explicit修饰,…
本文系转载,原文链接:http://www.cnblogs.com/ymy124/p/3632634.html 首先, C++中的explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造函数是显示的, 而非隐式的, 跟它相对应的另一个关键字是implicit, 意思是隐藏的,类构造函数默认情况下即声明为implicit(隐式). 那么显示声明的构造函数和隐式声明的有什么区别呢? 我们来看下面的例子: class CxString  // 没有使用explicit关键字的…
看书看到了explicit关键字,就来做个笔记,讲得比较明白,比较浅. 在C++中,我们有时可以将构造函数用作自动类型转换函数.但这种自动特性并非总是合乎要求的,有时会导致意外的类型转换,因此,C++新增了关键字explicit,用于关闭这种自动特性.即被explicit关键字修饰的类构造函数,不能进行自动地隐式类型转换,只能显式地进行类型转换. 注意:只有一个参数的构造函数,或者构造函数有n个参数,但有n-1个参数提供了默认值,这样的情况才能进行类型转换. 下面通过一段代码演示具体应用(无ex…
C++编程语言中有很多比较重要的关键字在实际编程中起着非常重要的作用.我们今天为大家介绍的C++ explicit关键字就是其中一个应用比较频繁的关键字.下面就让我们一起来看看这方面的知识吧. C++ explicit关键字用来修饰类的构造函数,表明该构造函数是显式的,既然有"显式"那么必然就有"隐式",那么什么是显示而什么又是隐式的呢? 如果c++类的构造函数有一个参数,那么在编译的时候就会有一个缺省的转换操作:将该构造函数对应数据类型的数据转换为该类对象,如下面…
C++ explicit关键字用来修饰类的构造函数,表明该构造函数是显式的,既然有"显式"那么必然就有"隐式",那么什么是显示而什么又是隐式的呢? 如果c++类的构造函数有一个参数,那么在编译的时候就会有一个缺省的转换操作:将该构造函数对应数据类型的数据转换为该类对象,如下面所示: 上面的操作即是所谓的"隐式转换". 如果要避免这种自动转换的功能,我们该怎么做呢?就是关键字explicit的作用了,将类的构造函数声明为"显式"…
转载:https://www.cnblogs.com/ymy124/p/3632634.html 首先, C++中的explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造函数是显示的, 而非隐式的, 跟它相对应的另一个关键字是implicit, 意思是隐藏的,类构造函数默认情况下即声明为implicit(隐式). 那么显示声明的构造函数和隐式声明的有什么区别呢? 我们来看下面的例子: class CxString  // 没有使用explicit关键字的类声明, 即默…
原文转自:http://www.cnblogs.com/ymy124/p/3632634.html 首先, C++中的explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造函数是显示的, 而非隐式的, 跟它相对应的另一个关键字是implicit, 意思是隐藏的,类构造函数默认情况下即声明为implicit(隐式). 那么显示声明的构造函数和隐式声明的有什么区别呢? 我们来看下面的例子: class CxString  // 没有使用explicit关键字的类声明, 即…
参考:http://www.cnblogs.com/ymy124/p/3632634.html 总结: 带参数的构造函数中有两种比较常见的构造函数:拷贝构造函数和转型构造函数. 转型构造函数只有一个参数,如果该参数是int型,则我们是将int型对象转换为类对象. 直接强制关闭掉这种隐式类型转换,在C++中,通过关键字explicit可以实现该功能. 在C++中, 如果的构造函数只有一个参数时, 那么在编译的时候就会有一个缺省的转换操作:将该构造函数对应数据类型的数据转换为该类对象. C++中的e…
1.什么是隐式转换: 众所周知,C++的基本类型中并非完全的对立,部分数据类型之间是可以进行隐式转换的. 所谓隐式转换,是指不需要用户干预,编译器私下进行的类型转换行为.很多时候用户可能都不知道进行了哪些转换. 2.为什么要进行隐式类型转换: C++面向对象的多态特性,就是通过父类的类型实现对子类的封装. 通过隐式转换,你可以直接将一个子类的对象使用父类的类型进行返回. 在比如,数值和布尔类型的转换,整数和浮点数的转换等. 某些方面来说,隐式转换给C++程序开发者带来了不小的便捷. C++是一门…
1. C++中的explicit C++提供了关键字explicit,可以阻止不应该允许的经过转换构造函数进行的隐式转换的发生.声明为explicit的构造函数不能在隐式转换中使用. C++中, 一个参数的构造函数(或者除了第一个参数外其余参数都有默认值的多参构造函数), 承担了两个角色. 1 是个构造器 ,2 是个默认且隐含的类型转换操作符. class Test1 { public: Test1(int n) { num=n; }//普通构造函数 private: int num; }; c…
要文转自:http://www.cnblogs.com/ymy124/p/3632634.html 首先, C++中的explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造函数是显示的, 而非隐式的, 跟它相对应的另一个关键字是implicit, 意思是隐藏的,类构造函数默认情况下即声明为implicit(隐式). 那么显示声明的构造函数和隐式声明的有什么区别呢? 我们来看下面的例子: class CxString // 没有使用explicit关键字的类声明, 即默…
在C++程序中很少有人去使用 explicit 关键字,不可否认,在平时的实践中确实很少能用的上.再说C++的功能强大,往往一个问题可以利用好几种C++特性去解决.但稍微留心一下就会发现现有的MFC库或者C++标准库中的相关类声明中explicit出现的频率是很高的.了解explicit关键字的功能及其使用对于我们阅读使用库是很有帮助的,而且在编写自己的代码时也可以尝试使用.既然C++语言提供这种特性,我想在有些时候这种特性将会非常有用. 按默认规定,只用传一个参数的构造函数也定义了一个隐式转换…
C++ explicit关键字用来修饰类的构造函数,表明该构造函数是显式的,既然有"显式"那么必然就有"隐式",那么什么是显示而什么又是隐式的呢? 如果c++类的构造函数有一个参数,那么在编译的时候就会有一个缺省的转换操作:将该构造函数对应数据类型的数据转换为该类对象,如下面所示: #include "stdafx.h" class A { public: A(int n) {m = n;} private: int m; }; int _tma…
按默认规定,只用传一个参数的构造函数也定义了一个隐式转换.举个例子: #pragma once class CExample { public: CExample(void); CExample(); ~CExample(void); public: int m_iFirst; int m_iSecond; }; #include "StdAfx.h" #include "Example.h" CExample::CExample() { } CExample::~…
http://www.cnblogs.com/chio/archive/2007/09/17/895263.html c++中的explicit关键字用来修饰类的构造函数,表明该构造函数是显式(调用)的,既然有"显式"那么必然就有"隐式",那么什么是显示而什么又是隐式的呢? 如果c++类的构造函数有一个参数,那么在编译的时候就会有一个缺省的转换操作:将该构造函数参数对应数据类型的数据转换为该类对象,如下面所示: class MyClass { public: MyC…
本文转自tiankong19999 首先, C++中的explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造函数是显示的, 而非隐式的, 跟它相对应的另一个关键字是implicit, 意思是隐藏的,类构造函数默认情况下即声明为implicit(隐式). 那么显示声明的构造函数和隐式声明的有什么区别呢? 我们来看下面的例子: class CxString // 没有使用explicit关键字的类声明, 即默认为隐式声明 { public: char *_pstr; in…
每一种语言都有非常多的关键字,而且这些关键字也都大同小异,不过毕竟还是有些许的不一样.有些关键字大家碰到的多了,自然就熟悉了,但是有些关键字用得不大多,或者是新引入的,所以就不大熟悉了.我平常在用的时候,就是会碰到一些关键字,感觉有点生疏,平常也会把这些我不懂的关键字的用法了解一下并记录下来.想到应该也有很多跟我同样的人,所以就把我的记录跟大家分享一下.请各位tx多多指正! 访问关键字     base:用于派生类中访问基类的成员 调用基类上已被其他方法重写的方法 1 public overri…