Я считаю, что это сводится к обратной совместимости с С.
В C, когда вы объявляете struct
, как вы делали, то вы должны обратиться к нему как struct A
, а не только A
. Например:
void A() {}
struct A {};
void f()
{
A();
struct A x; // works fine
A y; // does not compile
}
В этом контексте имеет смысл позволить A
означать две разные вещи, потому что всегда ясно, какой из них вы имеете в виду, в зависимости от того, используется ли вы struct
или нет.
В C++ struct
s (и class
es) можно ссылаться напрямую, без использования ключевого слова struct
. Это вводит двусмысленность, о которой вы беспокоитесь, но альтернатива заключается в том, что действительный код C, подобный приведенному выше, не будет действительным кодом C++, что еще хуже.
Дизайнер сделал это решение, и никто не изменил его ... не уверен, какой другой ответ вы ищете. Возможно, это было для совместимости с кодом C или другим существующим кодом –
Я спрашиваю, почему бы и нет? Просто чтобы люди не путали себя? – csmckelvey
Я голосую, чтобы закрыть этот вопрос как вне темы, потому что он должен быть адресован Бьярне Страуструпу. Все остальное - это более или менее неосведомленное мнение. – EJP