Vì vậy, câu hỏi của tôi rất đơn giản:Nhà xây dựng/chuyển nhượng mặc định có bị làm phiền bởi noexcept hoặc constexpr không?
Có bất kỳ điểm nào trong việc chỉ định hàm tạo lớp mặc định là noexcept
hoặc constexpr
(hoặc bất kỳ thứ gì khác bạn có thể làm)?
struct foo
{
foo() = default;
// vs
constexpr foo() noexcept = default;
// same thing would apply for copy/move ctors and assignment operators
};
Hai hành vi có giống nhau không?
Điều đó có phụ thuộc vào việc lớp học có phải là POD không? Ví dụ với ví dụ trên cả hai sẽ hoạt động theo cùng một cách, trong khi nếu ví dụ tôi có một thành viên riêng std::vector<int> v = { 1, 2, 3, 4 };
sử dụng phân bổ trong lớp, foo() = default;
theo mặc định không phải là noexcept
và không phải là constexpr
.
Bằng cách viết foo() = default;
trình biên dịch chỉ chọn phiên bản tốt nhất: noexcept
nếu có thể và constexpr
nếu có thể, v.v.
Tôi hy vọng câu hỏi là rõ ràng!