`

为什么要用explicit

    博客分类:
  • c++
阅读更多
class A{
public:
    explicit A(int i){}//防止隐式转换成int
};

int main(){
    A a = 10;//error: conversion from ‘int’ to non-scalar type ‘A’ requested
}

那么为什么要加explicit呢,一直搞不清楚,搜中文搜了几次也搜不出什么东西,说来说去就一句:防止隐式转换,但为什么加防止隐式转换呢?

换英文随便搜了下,倒有不少有用信息,有个老外是这么说的:
anyone who doesn’t make a single-argument constructor explicit should be shot. No mercy.
谁要是在单一参数构造函数前不加explicit就该拖出去枪毙,不要怜悯...太恐怖了,看来做程序员也是门危险的职业啊

class A {};

class B
{
public:
    B() {}
    explicit B(A const&) {} //2.所以在这加上explicit吧
};

void f(B const&) {}

int main()
{
    A obj;
    //f(obj);//1.这里明明是要A,但是把B传进去却可以编译通过,是不是有点很不好呢?
    f(B(obj));
}

class B
{
public:
    B() {}
    explicit B(A const&,C=NULL,D=NULL) {}//当然2,3或是多个参数一样要防止,因为c++允许给default值,那么依然多个参数也有可能变成单一参数.所以同样要加上
};


分享到:
评论

相关推荐

    C++中explicit作用示例代码

    在不使用`explicit`的情况下,编译器会自动将一个类型的数据转换为另一个类型的对象,这可能导致意外的类型转换和潜在的错误。例如,如果有一个接受整型参数的类构造函数,那么在某些情况下,整数值可以直接被用来...

    MySQL 5.6 中的 TIMESTAMP 和 explicit_defaults_for_timestamp 参数

    但这种做法在新的版本中被弃用了,建议使用`explicit_defaults_for_timestamp`选项来明确控制`TIMESTAMP`字段的默认行为。 配置`explicit_defaults_for_timestamp`: 在MySQL配置文件(如`my.cnf`或`my.ini`)中,...

    C++ explicit通俗解释

    C++ explicit关键字在刚学的时候就接触到了,也从各处了解了一些,但始终云里雾里,在闲来无事的时候再仔细研究了一下,自己消化理解了一下,自认为比其他网友总结的精简而不失准确。

    前端开源库-is-explicit

    在前端开发领域,开源库扮演着至关重要的角色,它们提供了丰富的功能,帮助开发者高效地构建Web应用程序。...总之,is-explicit是一个值得前端开发者关注和使用的工具,它为对象和文本操作带来了更显式的解决方案。

    euler-explicit.f.zip_code_euler explicit_explicit_explicit fortr

    在描述中,我们看到"Fortran code for euler explicit",这表明压缩包内的源代码是用Fortran编程语言编写的,专门用于实现欧拉显式方法。 欧拉显式方法是一种简单且直观的数值积分方法,它在时间上离散化连续方程。...

    ANSYS Explicit Dynamics Analysis Guide.pdf

    总而言之,《ANSYS Explicit Dynamics Analysis Guide》是工程师和研究人员进行显式动力学分析的宝贵资源,提供了一套全面的工具和技术,帮助他们理解和应用ANSYS软件来解决复杂的瞬态动力学问题。

    Abaqus-Standard和Abaqus-Explicit

    Abaqus/Explicit是为求解高度非线性问题,如冲击、爆炸、碰撞等问题而设计的显式动力学分析模块。它采用显式求解器,非常适合于模拟短暂的、瞬时的动态事件,该模块通过显式积分方法逐个时间步长地跟踪系统的响应。...

    Quasi-explicit-SVI

    Quasi-ExplicitCalibrationofGatheral'sSVImodel-Zeliade39、#的盖思勒尔拟显的SVI模型zeliade校准;

    Implicit-explicit Finite-difference Lattice Boltzmann Method for Compressible Flows

    Implicit-explicit Finite-difference Lattice Boltzmann Method for Compressible Flows,王勇,何雅玲,We propose an implicit-explicit finite-difference lattice Boltzmann method for compressible flows in ...

    Option Explicit

    Dim MsgText As String On Error GoTo myErr If msgList.Rows > 1 Then If MsgBox("真的要删除仓库编号为" & Trim(msgList.TextMatrix(msgList.Row, 1)) & "的记录吗?", vbOKCancel + ...

    ABAQUS_Explicit_终极完美版

    ABAQUS_Explicit_终极完美版

    option explicit

    使用"Option Explicit"能确保你在程序开始时就清楚了解每个变量的作用和类型,减少因为拼写错误或无意中创建新变量导致的bug。 在提供的代码中,我们可以看到一个名为"Tmr"的宏,它实现了一个倒计时功能。这个宏...

    Explicit-VUMAT.rar_explicit_explicit vumat_vumat_vumat material

    本压缩包中的"Explicit-VUMAT.rar"文件,主要探讨了显式VUMAT在模拟单向纤维复合材料的损伤与破坏过程中的应用。 显式动力学求解器在ABAQUS中常用于瞬态、非线性问题,特别是涉及高速撞击、爆炸等动态事件。显式...

    C++ Explicit关键字详细解析

    在未使用`explicit`的情况下,如果一个构造函数接受单个参数,编译器会允许使用该构造函数进行隐式类型转换,这可能会导致意外的类型匹配和不易察觉的错误。例如,在原始的`gxgExplicit`类中,即使没有`explicit`...

    C# 自定义 implicit和explicit转换 demo

    在这种情况下,只有当程序员明确地使用`(int)`转换操作符时,才能将`Int64ToInt32`类型的值转换为`int`类型。 ### 使用示例 在`OperatorTest`这个项目或文件中,可能包含一个或多个演示`implicit`和`explicit`转换...

    Explicit SIMD types for CUDA

    Explicit SIMD types for CUDA

    DFG.zip_2D_2D explicit matlab_explicit_heat_heat transfer

    标题“DFG.zip_2D_2D explicit matlab_explicit_heat_heat transfer”表明这是一个使用MATLAB编程解决二维显式热传递问题的项目。这个项目的重点是理解和应用显式方法来解决二维热传导方程,这在工程和科学计算中是...

    explicit_euler

    9. `modInit.f90`:初始化模块,负责设置初始条件和边界条件,为求解过程做好准备。 综上所述,这个程序通过SSPRK2方法求解二维Euler方程,展示了CFD领域的数值技术在解决复杂流动问题中的应用。每一个模块都扮演着...

    Explicit Nonlinear Model Predictive Control Theory and Application

    显式非线性模型预测控制(Explicit Nonlinear Model Predictive Control, ENMPC)是一种先进的控制策略,用于解决复杂的非线性系统的控制问题。该方法基于对系统的非线性动力学模型进行离线计算,预先计算出控制律,...

Global site tag (gtag.js) - Google Analytics