X x("a"),y("b");
Эквивалентно
X x("a");
X y("b");
Поэтому я сосредоточусь на
X x("a");
Это объявление и инициализация переменной x
. Учитываются только конструкторы и преобразования (*).
operator()
- оператор вызова функции. Он используется для вызова объекта, как если бы это была функция. Так что он используется на существующем объекте. Например:
X x("asd"); // <-- constructor call
x("yolo"); // <-- operator() call
В качестве примечания я рекомендую использовать синтаксис скобки init {}
для инициализации объектов:
X x{"asd"};
auto x = X{"asd"};
*) As бонус , вот пример используемого пользователем оператора преобразования:
struct X { };
struct Y
{
operator X() const { return X{}; }
};
auto test()
{
Y y;
X x(y);
// the above line is equivalent with:
X x = static_cast<X>(y.operator X());
}
Я использовал X x(y)
для имитации c вашего примера, но опять же, я рекомендую:
auto test()
{
Y y{};
X x{y};
}
вместо