Trong cuốn sách Lập trình Generic và STL (phiên bản Trung Quốc), nó nói:hàm tạo hoặc sao chép hàm tạo?
X x = X()
sẽ gọi constructor sao chép.
Có vẻ hơi lạ với tôi. Và tôi viết một chương trình thử nghiệm như thế này
#include <iostream>
class Test {
public:
Test() {
std::cout << "This is ctor\n";
}
Test(const Test&) {
std::cout << "This is copy-ctor\n";
}
};
int main(int argc, char** argv)
{
Test t = Test();
return 0;
}
Đầu ra là "Đây là ctor". ok, bây giờ tôi đang bối rối, đó là đúng?
Trong gcc, bạn có thể phải sử dụng '-fno-elide-constructors', vì ngay cả' -O0' cũng không ngăn chặn được sự cắt bỏ, tôi nghĩ vậy. –
@Kerrek: Cảm ơn! –
Bản sao có thể được elided ngay cả khi nó không phải là * tầm thường *, bản sao được elided bằng cách xây dựng tạm thời ở vị trí của biến địa phương. Độ phức tạp của đối tượng hoặc bản sao không liên quan đến tối ưu hóa đó. –