Я даю вам, что это кажется нелогичным, но если вы думаете о возможных значениях, это имеет большой смысл.
Не зная, что может быть Foo
, ни человек, ни компилятор (здесьчеловеческая перспектива более важна) сможет определить, является ли Foo f2 = Foo;
а) созданием нового временного объекта Foo
и копированием создания другого с ним или б) присвоением копии значения переменной Foo
построенный объект (f2
).Для нас это может показаться очевидным, потому что наше соглашение говорит нам, что Foo
должен быть типом с заглавной буквы, но в целом это не так просто (опять же: это в основном относится к читателю-человеку, который не обязательно имеет весь источниккод запоминается).
Разница между (2)
и (4)
заключается в том, что для последнего допустима только одна интерпретация, поскольку new var
(где var
- переменная) не является допустимым выражением.