tipo significa que informacion for features descargar datos creador c++ stdstring string-literals function-overloading overload-resolution

informacion - que significa void en c++



¿Por qué el compilador prefiere f(const void*) a f(const std:: string &)? (1)

Considere el siguiente código:

#include <iostream> #include <string> // void f(const char *) { std::cout << "const char *"; } // <-- comment on purpose void f(const std::string &) { std::cout << "const std::string &"; } void f(const void *) { std::cout << "const void *"; } int main() { f("hello"); std::cout << std::endl; }

g++ (Ubuntu 6.5.0-1ubuntu1~16.04) 6.5.0 20181026 este programa usando g++ (Ubuntu 6.5.0-1ubuntu1~16.04) 6.5.0 20181026 :

$ g++ -std=c++11 strings_1.cpp -Wall $ ./a.out const void *

Tenga en cuenta que el comentario está a propósito para probar, de lo contrario el compilador usa f(const char *) .

Entonces, ¿por qué el compilador selecciona f(const void*) sobre f(const std::string &) ?


La conversión a una std::string requiere una "conversión definida por el usuario".

La conversión a void const* no lo hace.

Las conversiones definidas por el usuario se ordenan detrás de las integradas.