Составив открытый конструктор, вы создадите небольшую программу , но не увидите побочный эффект «Копировать».Почему требуется конструктор публичных копий, даже если он не вызывается?
#include <iostream>
class X
{
public:
X(int) { std::cout << "Construct" << std::endl; }
// Having a public copy constructor will make the little program
// compile, but not showing the side effect "Copy".
private:
X(const X&) { std::cout << "Copy" << std::endl; }
private:
X& operator = (const X&);
};
int main() {
X x = 1;
return 0;
}
X x = 1 означает X x (X (1)), насколько я знаю, но он оптимизирован до X x (1); – odinthenerd
Требуется, чтобы код C++ был переносимым между реализациями, которые могут или не могут выполнять копирование по своему усмотрению. – jrok
Попробуйте выполнить компиляцию с флагом '-fno-elide-constructors'. –