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

c++ - `const` thành non-`const` hoặc non-`const` thành `const`

In lại Tác giả: Walker 123 Thời gian cập nhật: 28-11-2023 00:12:14 32 4
mua khóa gpt4 Nike

Đoạn mã sau được sử dụng để tồn tại cùng một lúc hằng số và không hằng số Giảm trùng lặp mã khi sử dụng getters. nó không bao giờ hằng số tạo nên hằng số Phiên bản. Tôi đã tìm kiếm và rất nhiều người nói rằng tôi nên bắt đầu với hằng số Tạo không hằng số Phiên bản.

Ý tưởng của tôi là nếu tôi bắt đầu với hằng số Việc tạo phiên bản không hằng số phiên bản, trái ngược với mã bên dưới, việc hủy đăng ký con trỏ được trả về có thể không an toàn hoặc ban đầu có thể hằng số trích dẫn. Tôi thực sự không chắc chắn về điều này, vì vậy tôi yêu cầu làm rõ, "hướng" chính xác là gì?

mẫu
cấu trúc cấu trúc
{
typedef Loại T;
};

mẫu
Trình cấu hình cấu trúc
{
typedef const T &Type;
};

mẫu
Bộ cấu trúc cấu trúc
{
typedef const T &&Type;
};

mẫu
Trình cấu hình cấu trúc
{
typedef const T *Loại;
};

mẫu
cấu trúc ReturnType;

mẫu
struct ReturnType
{
typedef Loại R;
};

mẫu
struct ReturnType
{
typedef Loại R;
};

mẫu
cuộc gọi tự độngConstVersion(const T *t, F f, Ts ...ts)
{
return const_cast::Type>::Type>((const_cast(t)->*f)(ts...));
}

cấu trúc A
{
Một *p;
A *get() {return p;}
const A *get() const {return callConstVersion(this, static_cast(&A::get));}
};

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

Bạn nên luôn bắt đầu vớihằng số Tạo phiên bảnkhông phải hằng phiên bản chứ không phải ngược lại. Lời giải thích rất đơn giản, hãy nghĩ về nó theo cách này:

Bạn chỉ có thểkhông cố định gọi đồ vậtkhông cố định getter. Nếu đối tượng làkhông cố định, bạn có thểkhông cố định an toàn trong phương phápconst_cast của bạnhằng số getter. Tại sao? Bởi vì bạn chỉ có thể không cố định Phương thức này được gọi trên đối tượng.

Cách tiếp cận ngược lại không an toàn vì trong hằng số gọi vào không phải hằng phương pháp, bạn không thể đảm bảo rằng hằng số được bảo toàn.

Về c++ - `const` thành non-`const` hoặc non-`const` thành `const`, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/32426504/

32 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