variable usa una tipos tipo que programacion pero locales las inicializar implícito funciones forzada deben datos conversion con como c++ explicit-constructor

usa - ¿Cuál es la diferencia entre asignación explícita e implícita en C++?



tipos de datos en c# (3)

Difieren si una clase tiene un constructor marcado como ''explícito''. Entonces, uno de estos no funciona.

De lo contrario, no hay diferencia.

int value = 5; // this type of assignment is called an explicit assignment int value(5); // this type of assignment is called an implicit assignment

¿Cuál es la diferencia entre esos, si los hay, y en qué casos difieren la asignación explícita e implícita y cómo?

http://weblogs.asp.net/kennykerr/archive/2004/08/31/Explicit-Constructors.aspx

EDITAR: De hecho, acabo de encontrar este artículo, que lo aclara mucho más ... y plantea otra pregunta, si usted ( en general ) marca a los constructores tomando un solo parámetro de un tipo primitivo: numeric / bool / string - tan explícitos y dejar el resto como están (por supuesto, vigilando las trampas como constructores como (int, SomeType = SomeType()) ?


Ninguno de estos es una asignación de ningún tipo, ambos son inicialización. El primero usa la inicialización de la copia, y el segundo la inicialización directa. (FWIW, estoy bastante seguro de que nunca antes había escuchado los términos "asignación explícita" o "asignación implícita").

Edición: (Sobre todo en respuesta al comentario de Nathan):

Aquí hay una versión corregida del código de tu comentario:

#include <iostream> struct Foo { Foo() { std::cout << "Foo::ctor()" << std::endl; } Foo(Foo const& copy) { std::cout << "Foo::cctor()" << std::endl; } Foo& operator=(Foo const& copy) { std::cout << "foo::assign()" << std::endl; return *this; } }; int main(int, const char**) { Foo f; Foo b(f); Foo x = b; return 0; }

El resultado de ejecutar esto debería ser:

Foo::ctor() Foo::cctor() Foo::cctor()

Si lo ejecuta y obtiene un foo::assign() , tire su compilador y consiga uno que funcione (ah, y háganos saber qué compilador es el que está tan roto).


Sólo el primero es una tarea. Ambos son inicialización.

Edición: en realidad, estoy equivocado. Tampoco son asignaciones.