zoukankan      html  css  js  c++  java
  • 【C++】隐式类型转换和 explicit关键字

    来自:黄邦勇帅

    1. 当类中带有一个参数的构造函数时,将执形对象的隐式转换,比如有类 A,有一个带有一个参数的构造函数A(int i){}则当出现语句A m=1;就会调用带有一个参数的构造函数来创建对象m,也就是将语句转换为A m(1)的形式。


    2. 如果有一个函数,比如 void f(A j){}这个函数需要一个类A 的对象作为参数,但是当调用语句为f(2)时,同样能调用这个函数,这时函数的形 参A j 被解释为,A j=2 即会隐式调用带有一个参数的构造函数来创建一个对象j。

    但是有一种形式的函数定义当出现语句 f(2)这样的调用时会出错,就是函数 f 定义的形式为 void f(A &j){}定义一个接受一个实参的引用时会出错,具体原因不清楚。但这几种情况都能正确调用void f(A j){},void f(const A j){};void f(constA & j){}。


    3. 如果不需要这种隐式的类型转换则在构造函数前使用关见字 explicit,这个关见字只能用于构造函数前。如果在构造函数前使用explicit 关见字,这时语句 A m=1 和 f(2)都将出错。

    4.声明为explicit的构造函数不能在隐式转换中使用。

  • 相关阅读:
    spring使用JdbcDaoSupport中封装的JdbcTemplate进行query
    javascript正则表达式
    Hi java新特性
    jdk 1.5
    jdk 1.6 & 1.7新特性
    core java 10~12(多线程 & I/O & Network网络编程)
    core java 8~9(GUI & AWT事件处理机制)
    core java 7 exception
    core java 5~6(OOP & 高级语言特征)
    响应式布局样例
  • 原文地址:https://www.cnblogs.com/dplearning/p/4783637.html
Copyright © 2011-2022 走看看