У меня есть класс с неявным конструктором const char *. Моя интуиция подсказывает мне, что не имеет значения, вызываю ли я неявно или явно конструктор, но, очевидно, это имеет значение в случае const char *, и я не понимаю, почему. Компилятор VC ++ соответствует foo (const String & t) для первого вызова foo в приведенном ниже коде:
struct Str
{
Str(const char *c)
{
value = c[0];
}
Str(double c)
{
value = char(c);
}
char value;
};
void foo(const Str &t)
{
cout << "const Str &t matched\n";
}
void foo(const Str &&t)
{
cout << "const Str &&t matched\n";
}
void main()
{
foo("v");
foo(Str("v"));
foo(5.0);
foo(Str(5.0));
}
Это соответствует Str && t версии foo для всего остального. Почему он ведет себя иначе в неявном случае "v"? И что я должен изменить, чтобы соответствовать && версии foo? (представьте, что foo является, например, функцией vector :: push_back - я бы не стал явно приводить все мои строковые литералы.)