if block and variable declaration
Известно, что С++ позволяет объявлять переменную в условии блока if
:
if (SomeType st = SomeType(...)) { ... }
Удивило, что использовать другой стиль инициализации невозможно:
if (SomeType st(...)) { ... }
А почему?
2 коммент.:
Что интересно, в первом случае реально вызова operator= может и не происходить. К bool-у приводится уже сам объект st а не результат operator= для типа SomeType.
Т.е. и в первом и во втором случае инициализации были бы эквивалентны.
Все это понятно:
8.5 Initializers
If the initialization is direct-initialization, or if it is copy-initialization where the cv-unqualified version
of the source type is the same class as, or a derived class of, the class of the destination, constructors
are considered. The applicable constructors are enumerated (13.3.1.3), and the best one is
chosen through overload resolution (13.3). The constructor so selected is called to initialize the
object, with the initializer expression(s) as its argument(s). If no constructor applies, or the overload
resolution is ambiguous, the initialization is ill-formed.
Подозреваю, что может быть непонятка из-за того, что SomeType st(...) - декларация функции.
Отправить комментарий