`
fireDragonpzy
  • 浏览: 463298 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

c++基础知识(一)explicit constructor

c++ 
阅读更多
explicit constructor: explicit关键字用来修饰构造函数,使之不能参加隐式转换。
 对于例子:
 class T
 {
 public:
  explicit T(){}       //没有效果。因为default constructor不会参加隐式转换
  explicit T(int i){}      //good
  explicit T(int i, double){}    //没有效果。因为本constructor有多个参数,不会参加隐式转换
  explicit T(T const &t){}    //bad design
  
 };
 
 T t = 1; //error. 不能从int转换到T
 T t2(2);  //ok. 显示调用.
 T t3 = T(3); //当拷贝构造函数为explicit时:error. no copy constructor available or copy constructor is declared 'explicit'
     //当拷贝构造函数不为explicit时:ok. 但不会调用copy constructor.
     //我猜想,copy constructor用explicit修饰时,表示作者不容许任何形如T obj1 = obj2;行为
 
 T t4 = t2;  //error.原因与T t3 = T(3);同
     /*注意:当类T是下面定义时:
      class T
      {
      public:
       T(int i){}     //not explicit
       explicit T(T const &t){} //explicit
       operator int(){ return 1; } //
      };
      
      T t4 = t2;  //ok.编译器会:先t2 -> int,再T(int)
          //即explicit T(T const &t){}只是将这个函数从可能的转换集合中排除了,如果还有其它的路径,也是可以的。
     */
 
 T t5(t2);  //ok.显示调用
 
总结:compile在构造类的一个对象上做的小动作太多了,为了使代码清晰,推荐:
 1. 总是定义一个default constructor和一个copy constructor,都不要声明为explicit
 2. 如果类的成员有非数值类型(比如指针,类对象,数组),总是定义一个copy constructor,不要声明为explicit
  如果没有,如果bitewise copy足够好的化,可不定义copy constructor,
 2. 定义其它有单个参数的constructor时,声明为explicit
 3. 定义对象时总是用显示调用的方式,而不是用赋值符'='。
  这点最重要。
 参考:
  class T
  {
  public:  
   T(): value(0) {}     //不采用缺省值的方案,更清晰。(普通的函数可以。)
   T(T const &t): value(t.i) {}
   explicit T(int i): value(i) {}  //使用explicit关键字
  private:
   int value;
  };
  
  void test(T t){}
  
  int main()
  {
   T t;
   T t2(t);
   T t3(3);
   //T t4 = 3; //不推荐
   //T t5 = t; //不推荐
   
   test(t);
   test(t2);
   test(t3);
   //test(4); //4不能隐式转换为T
  }

摘自:http://blog.csdn.net/xtyyumi301/article/details/662631
分享到:
评论

相关推荐

    C++ 基础知识总结_终稿_124.pdf

    ### C++基础知识总结 #### 目录概览 本文档主要涵盖了C++语言的基础知识及其在实际开发中的应用,特别适合于C++的初学者。文档由多个章节组成,包括了C/C++语言特性、面向对象编程基础、内存管理、标准模板库(STL...

    C++ explicit通俗解释

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

    C++中explicit作用示例代码

    在C++编程语言中,`explicit`关键字是一个非常重要的特性,它主要用于控制构造函数的隐式类型转换。本文将深入探讨`explicit`的作用,并通过示例代码帮助理解其工作原理。 `explicit`关键字用于声明单参数构造函数...

    浅谈C++ Explicit Constructors(显式构造函数)

    C++中的显式构造函数(Explicit Constructors)是编程实践中一个重要的概念,主要用来控制类对象的隐式类型转换。在C++中,如果一个类有一个只接受一个参数的构造函数,那么这个构造函数可以被用来进行隐式类型转换...

    C-C++ 面试基础知识总结.pdf

    《C/C++面试基础知识总结》 C/C++是两种强大的编程语言,它们在软件开发领域有着广泛的应用。面试时,了解这些语言的基础知识是至关重要的。以下是对C/C++面试基础知识的详细解释: 1. **const和static作用**:`...

    c++,隐式转换及explicit简单介绍

    c++,隐式转换及explicit简单介绍,个人(新人)分享,有误请勿喷。

    C++ Explicit关键字详细解析

    在C++编程语言中,`explicit`关键字是一个非常重要的特性,它主要用于控制类的构造函数如何参与类型转换。本文将详细解析`explicit`关键字的用途、意义以及它如何影响类对象的创建和赋值。 `explicit`关键字用于...

    C++ explicit构造函数实例解析

    在C++编程语言中,`explicit`关键字是一个非常重要的特性,它用于控制类的构造函数如何进行隐式类型转换。本文将深入探讨`explicit`构造函数的概念、作用以及如何避免潜在的编程错误。 首先,让我们理解什么是构造...

    认识 C++ 中的explicit 关键字

    在C++编程语言中,`explicit`关键字是一个非常重要的修饰符,它用于构造函数,用于控制类型转换的行为。本文将深入探讨`explicit`关键字的作用、使用场景以及它如何帮助避免潜在的错误。 首先,让我们来看一下`...

    《深度探索C++对象模型》(Stanley B·Lippman[美] 著,侯捷 译)

    如果你是一位C++程序员,渴望对于底层知识获得一个完整的了解,那么Inside TheC++ Object Model正适合你。 目录: 本立道生(侯捷 译序) 前言(Stanley B.Lippman) 第0章 导读(译者的话) 第1章 关于对象...

    关于VC++学习的基础知识

    ### 关于VC++学习的基础知识 对于初学者来说,学习VC++可能会遇到各种挑战,但通过系统地了解其基础知识,可以有效地克服这些困难。本文将详细介绍VC++的基础知识,包括但不限于基本语法、代码规范以及一些高级特性...

    C++面试知识点.pdf

    一、C++编程基础 1. inline函数的处理步骤:当函数被定义为inline时,编译器在编译过程中会将函数的代码直接展开在调用处,以减少函数调用的开销。但是,最终是否内联取决于编译器的优化策略和函数的复杂度。 2. ...

    c/c++拷贝构造函数和关键字explicit详解

    C++中的拷贝构造函数和关键字explicit详解 C++中的拷贝构造函数是一种特殊的构造函数,它用于初始化对象时拷贝另一个对象的内容。拷贝构造函数的格式为`Type::Type(const Type&)`,其中`Type`是类的名称。拷贝构造...

    C++中的Explicit关键字

    在C++程序中很少有人去使用explicit关键字,不可否认,在平时的实践中确实很少能用的上。再说C++的功能强大,往往一个问题可以利用好几种C++特性去解决。但稍微留心一下会发现现有的MFC库或者C++标准库中的相关类...

    高效C++中级编程教程

    《高效C++中级编程教程》是一份针对有一定C++基础的学习者精心编撰的课程资料。这份教程旨在深化对C++编程思想的理解,特别是面向对象的编程思想,以及这一思想在实际编程中的应用技巧。教程内容丰富,涵盖了C++语言...

    二级C++复习资料.docx

    C++基础知识点总结 本篇文章对C++的核心知识点进行了详细的归纳,欢迎下载。完全符合计算机二级C++考试大纲要求。 一、C++概述 C++语言是由Bjarne Stroustrup博士于1980年开始创建的,旨在设计一种模拟语言,...

    C++基础关键字介绍.docx

    ### C++基础关键字详解 #### 一、引言 C++是一种广泛使用的面向对象的编程语言,它在软件开发、系统编程以及高性能计算等领域扮演着重要角色。掌握C++的关键字是学习这门语言的基础。本文将详细介绍C++中的一些...

    C++中的explicit关键字实例浅析

    `explicit`关键字在C++中是一个非常重要的特性,它用于控制类的构造函数是否允许进行隐式类型转换。在默认情况下,如果一个类有一个接受单个参数的构造函数,那么这个构造函数可以被用来进行隐式类型转换。然而,...

    C++ explicit关键字的应用方法详细讲解

    在C++编程语言中,`explicit`关键字是一个非常重要的特性,它主要用于控制类的构造函数的行为,特别是涉及类型转换的情况。`explicit`关键字用来修饰单参数构造函数,目的是防止编译器进行隐式类型转换,从而避免...

Global site tag (gtag.js) - Google Analytics