El uso de C ++ palabra clave explícita

La primera es la definición:
palabras clave explícitos puede modificar sólo un parámetro del constructor , o hay una serie de parámetros, pero además del primer argumento los demás parámetros tienen unos valores constructor por defecto. Su función es mostrar que el constructor se muestra explícitamente. (Constructor de la clase por defecto implícita)

Si el parámetro constructor de clase es mayor o igual a dos, una conversión implícita no se genera, sino que también es válido palabra clave explícita

Por ejemplo:

class AMD{
public:
    AMD(int level){  //这里的构造函数默认就是隐式声明
        .....
        }
.....
}

En este caso, si ejecuta la siguiente declaración:

AMD a(3);
AMD b=10;

Estos dos son ningún problema, la segunda frase AMD b = 10, no hay razón para que el problema es:
C ++, el constructor si sólo hay un argumento, entonces habrá una operación de conversión por defecto en tiempo de compilación: el constructor de un tipo de datos correspondiente se convierte en el objeto de clase.
Esto es AMD b = 10 en la implementación real de la operación equivalente a la declaración siguiente:

AMD b(10);
//或者
AMD c(10);
AMD b = c;

Aunque la explicación a través, pero este enfoque sigue siendo hostil, después de todo, AMD b = 10 El aspecto de redacción como el número entero asignado al objeto, no es ni carne ni pescado, pero en un código complejo fácil sentirse confundido - > así que ahora vamos a utilizar la palabra clave explícita

Después de la modificación explícita:

class AMD{
public:
    explicit AMD(int level){  //修饰后构造函数就是显式声明
        .....
        }
.....
}

En este caso, dos declaraciones que van antes de la ejecución,
el procesador AMD A (3.); Todavía no hay problema, pero AMD b = 10 ya no es factible (explícita constructor de la clase conversión automática implícita impedido)
El uso de C ++ palabra clave explícita
(caso compilados se produce un error)

De acuerdo con la definición de palabras clave explícitas, se puede modificar una serie de parámetros (de los cuales sólo uno tiene ningún valor predeterminado) constructor:

class AMD{
public:
    explicit AMD(int level,int size=0....){  //除了第一个参数都有缺省值
        .....
        }
.....
}

En este caso, las palabras clave son funciones explícitas utilizando AMD b = 10, etc. producirá conversiones de tipo implícitas comunicado todavía está prestando.

Debido modificado con tipo explícito evitar constructor conversión inesperado, y no hay desventajas, por lo que en circunstancias normales o fomentar el uso de explícita

Supongo que te gusta

Origin blog.51cto.com/14232799/2483022
Recomendado
Clasificación