cuốn sách gpt4 ai đã làm

c++ - Xác định hai biến: "Type a(arg), b(arg);" có hoàn toàn tương đương với "Type a(arg); Type b(arg);" không?

In lại Tác giả: Hồ Xil Thời gian cập nhật: 2023-11-01 16:36:33 29 4
mua khóa gpt4 Nike

Giả sử tôi muốn xác định hai biến của lớp {Type}. Hàm tạo lấy 1 tham số. Hai phương pháp sau đây có hoàn toàn tương đương nhau không (được biên dịch thành cùng một mã mục tiêu)?

Nhập a(arg), b(arg);

Nhập a(arg);
Loại b(arg);

Câu hỏi này xuất hiện sau khi tôi đọc một trang thảo luận về bảo mật ngoại lệ --- http://www.gotw.ca/gotw/056.htmCó một nguyên tắc "Thực hiện từng phân bổ tài nguyên (ví dụ: mới) trong câu lệnh mã riêng của nó, cung cấp ngay tài nguyên mới cho đối tượng người quản lý." Nó đưa ra một ví dụ: Đoạn mã sau đây là an toàn.

auto_ptr t1(T mới);
auto_ptr t2(T mới);
f(t1,t2);

Nhưng dòng sau đây không an toàn

f( auto_ptr( new T ), auto_ptr( new T ) );

Vậy thì sao

auto_ptr t1( T mới ), t2( T mới );
f(t1,t2);

Tôi đã kiểm tra tài liệu tiêu chuẩn ngôn ngữ C++ và không tìm thấy lời giải thích cụ thể nào về vấn đề này.

Còn việc làm đục nước thì sao?

Shared_ptr t1(T mới);
Shared_ptr t2(t1);

Shared_ptr t1( T mới ), t2( t1 );

câu trả lời hay nhất

Vâng, chúng tương đương nhau. Xem C++ 11, 8/3:

Mỗi trình khai báo init trong một khai báo được phân tích riêng biệt như thể nó nằm trong một khai báo97.

Chú thích 97 khá dài và nó nói T D1, D2,... Đn; "Thông thường" tương đương với T Đ1; , trường hợp ngoại lệ là T Ý nghĩa của câu bạn đưa ra sẽ bị ảnh hưởng bởi những câu tiếp theo. Hai ví dụ được đưa ra:

cấu trúc S {};
SS, T // không tương đương với:
SS;

auto i = 1, j = 2.0 // không tương đương với:
tự động i = 1; tự động j = 2,0;

Nhưng trong cả hai trường hợp, một trong các lựa chọn thay thế đều sai, vì vậy đó không phải là sự khác biệt khiến bạn phải khởi chạy trình gỡ lỗi.

Dẫu sao thì,auto_ptr t1( T mới ), t2( T mới );auto_ptr t1( T mới ); auto_ptr t2( T mới ); Vừa an toàn

Lưu ý rằng mã nguồn tương đương không được đảm bảo sẽ biên dịch thành cùng một mã đối tượng, chỉ có điều chúng có cùng ý nghĩa. Trong ví dụ của bạn, mã đích chứa chú thích gỡ lỗi sẽ có sự khác biệt hợp lý về số dòng mã nguồn, nhưng trình biên dịch cũng có thể đưa ra những khác biệt không mong muốn vì một số lý do không rõ ràng hoặc không có lý do chính đáng nào cả.

Về c++ - xác định hai biến: "Loại a(arg), b(arg);" có hoàn toàn tương đương với "Loại a(arg); Loại b(arg);" không?, chúng tôi đã tìm thấy một biến tương tự trong câu hỏi về Stack Overflow: https://stackoverflow.com/questions/8409416/

29 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress