Один из моих прошлых работодателей, 15-летний опытный разработчик, утверждает, что Copy CTOR для создания объекта превосходит оператор присваивания.
Таким образом,
Object x = Object(5, "My Object"); // is inefficient
Object y(5, "My Object"); // is efficient
Однако со следующим тестовым кодом я вижу, что компилятор всегда вызывает Copy CTOR для первой строки выше.
Такие как:
class test_ctor
{
public:
explicit
test_ctor(int x):_x(x)
{
std::cout << "CTOR: " << _x << "\n";
}
test_ctor & operator = (test_ctor const & y)
{
std::cout << "operator =: " << _x << "\n";
_x = y._x;
return *this;
}
private:
int _x;
};
int main(int argc, const char * argv[]) {
test_ctor const test = test_ctor(2);
return 0;
}
Поскольку мой бывший работодатель считает, что он звездный разработчик, мне интересно, что мне не хватает. Есть ли какой-то компилятор, который будет работать по-другому (например, MS Windows 7 / Visual Studio 2010+ и ОС / компиляторы OpenSuse 10+)?