Вызов конструктора является предварительным выражением

В стандарте C++ можно найти примеры выражений prvalue:

"prvalue

Следующие выражения являются выражениями prvalue:

литерал (кроме строкового литерала), такой как 42, true или nullptr;

вызов функции или перегруженное операторное выражение не возвращаемого типа, например str.substr(1, 2), str1 + str2 или it ++;..."

Это где такое выражение, как T() (вызов конструктора) будет идти?

Есть ли другое название для таких выражений?

1 ответ

Решение

Хотя частный случай конструктора по умолчанию меня немного озадачивает, это считается приведенным выражением, которое немного ниже в списке:

  • приведение выражения к не ссылочному типу, такому как static_cast<double>(x), std::string{}, или же (int)42;

Хотя идея преобразования ничего не является особенной, T() синтаксис действительно рассматривается как форма № 4 здесь.

Другие вопросы по тегам