`

explicit 关键字

    博客分类:
  • C++
阅读更多

explicit,和构造函数一起使用.
explicit   constructor指明构造函数只能显示使用,目的是为了防止不必要的隐式转化.
举个例子:
    有这样一段代码:

class   A
{
      public:
          A(int);
      private:
          int   num;
};

int   Test(const   A&)   //   一个应用函数
{
      ...
}

Test(2);   //   正确
过程是这样的:   编译器知道传的值是int而函数需要的是A类型,但它也同时知道调用A的构造函数将int转换成一个合适的A,所以才有上面成功的调用.换句话说,编译器处理这个调用时的情形类似下面这样:
    const   A   temp(2);             //   从2产生一个临时A对象
    Test(temp);           //   调用函数


如果代码写成如下样子:
class   A
{
      public:
        explicit   A(int);
      private:
          int   num;
};

int   Test(const   A&)   //   一个应用函数
{
      ...
}

Test(2);   //   失败,不能通过隐式类型转换将int类型变量构造成成A类型变量

分享到:
评论

相关推荐

    C++中的Explicit关键字

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

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

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

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

    我们今天为大家介绍的C++ explicit关键字就是其中一个应用比较频繁的关键字。下面就让我们一起来看看这方面的知识吧。 C++ explicit关键字用来修饰类的构造函数,表明该构造函数是显式的,既然有”显式”那么必然就...

    C++ Explicit关键字详细解析

    explicit关键字用来修饰类的构造函数,表明构造函数是显示的,相对的是implicit关键字。首先这个关键字只能用在类内部的构造函数声明上,而不能用在类外部的函数定义上,它的作用是不能进行隐式转换。 代码如下: ...

    认识 C++ 中的explicit 关键字

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

    C#关键字整理-1

    explicit关键字用于声明用户定义的类型转换运算符,该运算符必须使用强制转换来调用。 23. extern关键字:用于声明在外部实现的方法。示例:private static extern void AVIFileInit(); extern关键字用于声明在...

    C# CSharp 中所有关键字

    explicit 关键字用于声明用户定义的显式类型转换运算符。例如:class MyType{ public static explicit operator MyType(int i){ // code to convert from int to MyType}} 与隐式转换不同,必须通过类型转换调用...

    c++关键字详解

    接下来,explicit关键字用于单参数构造函数,防止隐式类型转换。默认情况下,C++允许通过单参数构造函数将一个类型隐式转换为另一个类型,这可能导致意外的类型转换。例如: ```cpp class MyInt { public: ...

    C++思维导图Xmind文件和.png文件(持续更新)

    初始化列表、匿名对象、static成员、类的隐式类型转换和explicit关键字、内部类思维导图xmind文件和.png文件 内存管理(new/delete使用详解) 模板——初识 STL——string类 STL——vector STL适配器——stack && ...

    C++ explicit通俗解释

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

    effective C++简要内容

    使用explicit关键字可以阻止编译器进行隐式类型转换,但仍然允许显式类型转换。这是一个防止非预期类型转换的有效方式。 ### 条款01:将C++视为语言集合 条款01建议程序员理解C++不是一个单一语言,而是由多个子...

    C++底层核心本质总结笔记

    关于explicit关键字,C++中的单参数构造函数默认会提供隐式类型转换,但有时这可能导致意外的类型转换。通过在构造函数前加上explicit,可以禁止这种隐式转换,确保只有显式类型转换是允许的。 在C++中,动态内存...

    More-Effective-CPP_cn.zip_模板类

    使用explicit关键字可以防止这种隐式转换,强制程序员显式地进行类型转换,从而提高代码的清晰性和安全性。 5. **命名空间(namespaces)**:命名空间用于解决C++中的命名冲突问题,它可以将相关的标识符组织在一起...

    C与C++面试易出点

    例如,如果一个构造函数只有一个参数,则可以使用explicit关键字防止该构造函数被用于隐式转换。 - 如 `class CBook { public: explicit CBook(double price); };`,这样就禁止了从 `double` 类型到 `CBook` 类型的...

    2021 年 C++ 程式设计語言律師等級考試1

    5. 第五题测试了考生对C++标准库和语言特性的理解,比如delete[]操作符的行为、模板参数列表中的typename用法、std::forward_list作为容器的适用性、命名空间的引入以及explicit关键字的应用。 这些题目反映了C++ ...

    2021 年 C++ 程序设计语言律师等级考试_SC1

    此题测试考生对C++语言规范的理解,如`delete[]`的行为、模板参数、变量类型、容器的使用、命名空间的引入以及explicit关键字的作用。正确选项需要符合C++的实际行为。 6. 本质与表现的概念: 这道题将哲学概念...

Global site tag (gtag.js) - Google Analytics