Если я называю «func (const generic & ref)» с целым числом как аргументом (вместо «общего» объекта), конструктор generic (int _a) будет для создания нового объекта.Литерал C++, переданный в const ссылается на автоматическое построение
class generic {
public:
int a;
generic() {}
generic(int _a) : a(_a) {
std::cout << "int constructor was called!";
}
generic(const generic& in) : a(in.a) {
std::cout << "copy constructor was called!";
}
};
void func(const generic& ref) {
std::cout << ref.a;
}
int main() {
generic g(2);
func(g); // this is good.
func(generic(4)); // this is good.
func(8); // this is good...... ?
return 0;
}
Последний вызов func (8) создает новый объект с использованием конструктора generic (int _a). Есть ли название для такого рода строительства? Должен ли программист явно конструировать объект перед передачей аргумента? Например:
func(generic(8));
Есть ли какой-либо выгоды при передаче целого числа (кроме экономии времени)?
http://en.cppreference.com/w/cpp/language/implicit_cast – szczurcio
У вас есть конструктор, который принимает 'int', поэтому компилятор будет использовать его для создания« generic ». Если вы хотите, чтобы он не использовал этот конструктор, используйте ключевое слово 'explicit '. –