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.