C++中显式、隐式与explicit关键字

在Qt的开发中看到explicit,由此展开搜索。

隐式:编译器完成的转换,如

int a = 1;
float b = 3;
float sum;
sum = a + b; //a本是int,编译器将a隐式地转化为了float

显式:用户完成的转换,如

float a=1;
float b=3;
int s;
s = (int)a+(int)b;//a与b被显式地转化为了float

对于函数而非数据,这里有另一个例子[引用]:

#include <iostream>
using namespace std;
class A{
  int x;
  public:
    A(){x=0;cout<<"Create A:0"<<endl;}
    A(int a){x=a;cout<<"Create A:"<<x<<endl;}
    ~A(){cout<<"Delete A:"<<x<<endl;}
};
void main()
{
  A a1;
  A *a2=new A(10);
  delete a2;
}
这个程序中:
A a1; 隐式调用了A()
A *a2=new A(10);显式调用了A(int a) 重载后的A()
delete a2;以及程序结束时都隐式调用了析构函数~A()

关于explicit关键字,在网上找了一下,大多很繁琐。这篇博客讲的比较深入浅出。推荐:http://www.cnblogs.com/cutepig/archive/2009/01/14/1375917.html一句话:explicit用于构造函数,抑制隐式转换的发生,防止出现误区。

引用:C++ 隐式和显式的区别 - https://zhidao.baidu.com/question/116242760.html

原文地址:https://www.cnblogs.com/pityhero233/p/8146585.html

时间: 2024-10-17 02:31:52

C++中显式、隐式与explicit关键字的相关文章

SQL Server中提前找到隐式转换提升性能的办法

    http://www.cnblogs.com/shanksgao/p/4254942.html 高兄这篇文章很好的谈论了由于数据隐式转换造成执行计划不准确,从而造成了死锁.那如果在事情出现之前发现了这类潜在的风险岂不是更好?     那么我们来看一个简单的例子,如代码清单1所示.   1: SELECT * 2: FROM HumanResources.Employee 3: WHERE NationalIDNumber = 243322160 4:  5: SELECT * 6: FR

OpenCV中operator的隐式类型转换

c++ operator操作符的两种用法 重载和隐式类型转换 今天学习OpenCV源码的时候碰到这种写法: template<typename _Tp> operator std::vector<_Tp>() const; template<typename _Tp, int n> operator Vec<_Tp, n>() const; template<typename _Tp, int m, int n> operator Matx<

Android开发:显式/隐式Intent意图跳转Activity总结

显式跳转 在已知包名和类名的情况下常用的跳转方法: 是 nt mIntent = new Intent(); mIn Int etent.setClassName("com.android.settings","com.android.settings.Settings"); mContext.startActivity(mIntent); 我们也常这么用: y.class); startActivity(intent); 这是跳转到当前应用的某个Activity,

Android中显示和隐式Intent的使用

显示启动activity                                                                                                                   这个很简单,下面是代码示例:为了看着方便,所以就把layout直接截图了,里面的代码只是一些简单的布局.activity_login.xml: activity_main.xml: 下面是Manifest.xml中的代码 1 <?xml vers

JSP中的EL隐式对象

一 介绍 JSP表达式语言(Expression Language),简称EL,为存取变量.表达式运算和读取内置对象等内容提供了新的操作方式.目的:为了使JSP写起来更加简单.表达式语言的灵感来自于 ECMAScript 和 XPath 表达式语言,它提供了在 JSP 中简化表达式的方法. ${ param. username } 等价于 <%=request. getParameter("username") %> ${ requestScope.userlist } 等

C++中算术运算的隐式转换规则

1.隐式转换     C在以下四种情况下会进行隐式转换: 1.算术运算式中,低类型能够转换为高类型. 2.赋值表达式中,右边表达式的值自动隐式转换为左边变量的类型,并赋值给他. 3.函数调用中参数传递时,系统隐式地将实参转换为形参的类型后,赋给形参. 4.函数有返回值时,系统将隐式地将返回表达式类型转换为返回值类型,赋值给调用函数. 2.算数运算的隐式转换     算数运算中,首先有如下类型转换规则: 1.字符必须先转换为整数(C语言规定字符类型数据和整型数据之间可以通用) . 2.short型

Scala中的Implicit(隐式转换,隐式参数,隐式类)

文章来自:http://www.cnblogs.com/hark0623/p/4196452.html  转发请注明 代码如下: /** * 隐式转换 隐式参数 隐式类 */ //隐式转换 class Implicit(a: A) { def Test: Unit = { println("Implicit") } } class A { } object Implicit { //隐式转换 implicit def a2Implicit(a: A) = new Implicit(a)

5. C# -- 显式/隐式类型转换,溢出检查

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication1 {     class Program {         static void Main(string[] args) {             ushort destinationVar;      

PL/SQL中的数据类型隐式转换规则

原文来自  Techfox IT技术论坛 1) During INSERT and UPDATE operations, Oracle converts the value to the datatype of the affected column.对于INSERT和UPDATE操作,oracle会把插入值或者更新值隐式转换为字段的数据类型.如假如id列的数据类型为numberupdate t set id='1'; -> 相当于 update t set id=to_number('1');