logo search
volkov / C++ / Бьерн Страуструп-Справочное руководство по С++

R.8.1.1 Устранение неоднозначности

Неоднозначность, отмеченная в $$R.6.8, которая возникает из-за сходства

между приведением, заданным в функциональном стиле, и описанием,

может также появиться в контексте описания. В этом контексте она

проявляется как сходство между описанием функции, в котором есть

избыточные скобки вокруг имени параметра, и описанием объекта, в

котором в качестве инициализатора используется операция приведения,

заданная в функциональном стиле. Как и для операторов, неоднозначность

устраняется правилом, согласно которому следует считать описанием любую

конструкцию, которая может служить таковым. Можно явно устранить

неоднозначность в описании или с помощью приведения, заданного не в

функциональном стиле, или с помощью операции = для обозначения

инициализации, например,

struct S {

S(int);

};

void foo(double a)

{

S x(int(a)); // описание функции

S y((int)a); // описание объекта

S z = int(a); // описание объекта

}