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

Không phải "tham chiếu const" thực sự nên được gọi là "tham chiếu đến const" sao?

In lại Tác giả: Walker 123 Thời gian cập nhật: 27-11-2023 22:33:00 30 4
mua khóa gpt4 Nike

Tôi có cảm giác này khi chơi với tài liệu tham khảo constexpr. Nhưng bản thân vấn đề không liên quan gì đến constexpr, nó chỉ tự nó bộc lộ ra mà thôi.

Chúng ta biết rằng có "con trỏ tới const" và có "con trỏ const". Ngẫu nhiên thay, vì cái sau được sử dụng ít thường xuyên hơn cái trước, nên tên của chúng thực sự thường được dùng để chỉ cái trước. Tuy nhiên, không có sự phân biệt như vậy đối với các tài liệu tham khảo vì chúng không thể gắn kết lại được. Vì vậy, chúng tôi chỉ có "tham chiếu const" chứ không phải "tham chiếu đến const". Đây là một thuật ngữ phổ biến màđược sử dụngĐiều này cũng đúng trong các tiêu chuẩn. Nhưng điều này có vẻ không đúng với tôi.

Hãy xem xét một số ví dụ nổi tiếng được nhận xét bằng thuật ngữ phổ biến này:

      int i = 0; // Giá trị
int* pi = &i; // Con trỏ tới i
const int* cpi = &i; // Con trỏ tới const i
int const* cpi = &i; // Con trỏ tới const i (kiểu East-const)
int* const pci = &i // Hằng con trỏ tới i
int& ri = i; // Tham chiếu tới i
const int& rci = i; // Hằng tham chiếu tới i
int const& rci = i; // Const tham chiếu tới i (kiểu East-const)

Bây giờ chúng ta hãy xem xét kỹ hơn các dòng trên:

const int* cpi = &i; // Con trỏ tới const i
const int& rci = i; // Hằng tham chiếu tới i

const int* khai báo "con trỏ tới const" trong khi const int& Khai báo "tham chiếu const". Thứ tự trong khai báo giống nhau, thứ tự trong nghĩa khác nhau. Có một sự mâu thuẫn rõ ràng ở đây. Nhưng nếu chúng ta gọi nó là "tham chiếu đến const" thì sự mâu thuẫn sẽ biến mất. Thứ tự là như nhau ở cả hai bên.

cùng với constexpr Với sự ra đời của , căng thẳng gia tăng:

constexpr int& cri = i; // Constexpr tham chiếu tới i
constexpr const int& crci = i; // Constexpr const tham chiếu tới i

Tham chiếu "Constexpr const"? Ừm? tài liệu nói rõ ràng :

MỘT constexpr công cụ xác định được sử dụng trong khai báo đối tượng ngụ ý hằng số.

Một tài liệu tham khảo là một đối tượng. Vì vậy, khi constpxr Đã hằng số Tại sao chúng ta vẫn cần nó? Tuy nhiên, nếu Tôi là const, chúng tôi vẫn cần nó. Nhìn chán nản.

Nhưng với sự trợ giúp của "tham chiếu đến const", sự thất vọng không còn tồn tại nữa. chúng tôi sẽ crci Được gọi là "tham chiếu constexpr tới const i". Bây giờ thì rõ ràng rồi,hằng số áp dụng cho các đối tượng tham chiếu, trong khi constexpr áp dụng chotrích dẫn chính nó, nêu rõ thực tế là nó có thể được sử dụng trong ngữ cảnh constexpr. Và đó là const vì tất cả các tham chiếu đều là const. Có ý nghĩa. Để làm cho nó phù hợp hơn với con trỏ, chúng ta thậm chí có thể sử dụng cú pháp giả định sau:

const int& constexpr crci = i; // Constexpr tham chiếu tới const i
const int* const pci = &i; // Con trỏ const tới const i (tính nhất quán hoàn hảo)

Nhưng đó không phải là cách C++ hoạt động, dù tốt hay xấu.

Khái niệm "tham chiếu đến const" thực sự đã giúp tôi hiểu được điều "tham chiếu const const".

Bạn nghĩ gì? Khái niệm "tham chiếu đến const" nghe có thuyết phục bạn không?

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

Đúng,const int& Tên chính xác của là "cặphằng số int trích dẫn".

Nó thường được gọi là "hằng số Phải int trích dẫn" (có lẽ vì nó nghe hay hơn đối với một số người), nhưng về mặt kỹ thuật thì đây là một cách gọi sai.

Mặc dù chúng không thể gắn kết lại được nhưng bản thân các tài liệu tham khảo không bao giờhằng số(tức là để tham khảo,std::is_const_v luôn bằngSAI).


constexpr const int& crci 

Tham chiếu "Constexpr const" hả? ... Hãy gọi crci "tham chiếu const i"

Đúng vậy,crci là "tham chiếu constexpr tới const i".


Để làm cho nó phù hợp hơn với các con trỏ, chúng ta thậm chí có thể sử dụng cú pháp giả định sau:

const int& constexpr crci = i; // Constexpr tham chiếu tới const i
const int* const pci = &i; // Con trỏ const tới const i (tính nhất quán hoàn hảo)

Thực lòng tôi không hiểu đề xuất này sẽ cải thiện tính nhất quán như thế nào. int *constexpr pci; Nó không được phép dùng cho con trỏ, vậy tại sao nó lại được phép dùng cho tài liệu tham khảo?

Mọi thứ dường như khá nhất quán ngay từ đầu:

constexpr const int *a; // constexpr (và const) con trỏ tới const int
constexpr const int &a; // constexpr (nhưng không phải const) tham chiếu tới const int

Có, thêmconstexpr bản thân nó không làm tài liệu tham khảohằng số, nhưng tôi không nghĩ nó cần sửa. (hằng số Báo giá và khônghằng số Sự khác biệt giữa các trích dẫn là gì? )

Xin lưu ý rằngconstexpr Không phải là một phần của kiểu, mà là thuộc tính của biến. (Ví dụ constexpr int x; Sẽ x khai báo là const int loại, thay vì một số giả thuyết constexpr int).

Về c++ - "tham chiếu const" thực sự không nên được gọi là "tham chiếu đến 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/58579949/

30 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