zoukankan      html  css  js  c++  java
  • explicit关键字

    C++中,explicit关键字用来修饰类只有一个参数的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换,只能以显示的方式进行类型转换。

    explicit使用注意事项:

          explicit 关键字只能用于类内部的构造函数声明上。

          explicit 关键字作用于单个参数的构造函数。

          explicit关键字用来修饰类的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换。

    Bjarne Stroustrup的例子:
    class String{
          explicit String(int n);
          String(const char *p);
    };
    String s1 = 'a'; //错误:不能做隐式char->String转换
    String s2(10);   //可以:调用explicit String(int n);
    String s3 = String(10);//可以:调用explicit String(int n);再调用默认的复制构造函数
    String s4 = "Brian"; //可以:隐式转换调用String(const char *p);再调用默认的复制构造函数
    String s5("Fawlty"); //可以:正常调用String(const char *p);
    void f(String);
     
    String g()
    {
        f(10); //错误:不能做隐式int->String转换
        f("Arthur"); //可以:隐式转换,等价于f(String("Arthur"));
        return 10; //同上
    }
    在实际代码中的东西可不像这种故意造出的例子。
    发生隐式转换,除非有心利用,隐式转换常常带来程序逻辑的错误,而且这种错误一旦发生是很难察觉的。
    原则上应该在所有的构造函数前加explicit关键字,当你有心利用隐式转换的时候再去解除explicit,这样可以大大减少错误的发生。
  • 相关阅读:
    JAVA 注解的几大作用及使用方法详解
    内省、JavaBean、PropertyDescriptor类、Introspector类、BeanUtils工具包、注解、Rentention、Target、注解的基本属性和高级属性
    关于Hash集合以及Java中的内存泄漏
    ifconfig命令详情
    route命令详情
    ping命令详解
    scp命令详解
    ssh命令详解
    telnet命令详解
    sudo命令详解
  • 原文地址:https://www.cnblogs.com/wjw-blog/p/5673136.html
Copyright © 2011-2022 走看看