Я наткнулся на фрагмент кода со структурами, и теперь я совершенно не понимаю, как автоматически вызывается конструктор структуры. Я сделал фиктивный код, чтобы понять концепцию. Например,
struct obj {
int a = 0, b = 2;
obj (int aa) {
a = aa;
}
obj (int aa, int bb) {
a = aa;
b = bb;
}
int getSum () {
return a+b;
}
};
void calcSum (obj o) {
cout << o.getSum() << endl;
}
int main()
{
calcSum(5);
return 0;
}
Это печатает 7
. Я считаю, что конструктор с одним аргументом struct obj
вызывается автоматически. Если да, то как я могу заставить его автоматически вызывать конструктор с двойным аргументом? Я не могу этого сделать.
Как называется эта функция?
Также, пожалуйста, укажите мне несколько хороших статей, так как я не смог их найти.
Вы не можете вызвать конструктор, который требует два аргумента с одним аргументом.
Это достаточно автоматически?
calcSum({12, 34});
В любом случае, термин для дальнейшего исследования - неявное преобразование.Или
calcSum(obj(12, 34))
.@ HolyBlackCat да, это достаточно интуитивно понятно. но @Igor Tandetnik я не понимаю, как и почему это работает? Как это называется?
Пометка вашего конструктора как
explicit
должна предотвратить это BTW. Также см. этот en.cppreference.com/w/cpp/language/converting_constructorИнициализация списка. В частности,
calcSum({12, 34});
— это форма (7) в этой статье.