Почему этот код (неназначенная временная переменная, созданная из переменной const char *):
class A
{
public:
A(const char*) {}
};
int main()
{
const char* constCharPointerVariable = "StringLiteral";
A(constCharPointerVariable);
return 0;
}
Дайте эти ошибки?
error C2512: 'A' : no appropriate default constructor available
error C2040: 'constCharPointerVariable' : 'A' differs in levels of indirection from 'const char *'
Принимая во внимание, что этот код (назначенная временная переменная, созданная из переменной const char *):
class A
{
public:
A(const char*) {}
};
int main()
{
const char* constCharPointerVariable = "StringLiteral";
A a(constCharPointerVariable);
return 0;
}
Не дает ошибок.
И этот код (неназначенная временная переменная, созданная из const char *, переменная static_cast для const char *):
class A
{
public:
A(const char*) {}
};
int main()
{
const char* constCharPointerVariable = "StringLiteral";
A(static_cast<const char*>(constCharPointerVariable));
return 0;
}
Не дает ошибок.
Бонусные баллы, если вы можете указать номер раздела в спецификации C ++, в котором указан первый пример кода, который нельзя использовать.