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

Tại sao các thành viên tĩnh của công đoàn không được lưu trữ dưới dạng công đoàn?

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-03 08:24:41 27 4
mua khóa gpt4 Nike

Trong C++,union Có thể chứa các thành viên tĩnh, trong trường hợp các lớp, các thành viên này thuộc về một lớp và do đó chung cho tất cả các đối tượng.

liên minh U
{
dài l;
int i;
sl dài tĩnh;
intsi tĩnh;
};

int U::si;
dài U::sl;

Điều hợp lý là tất cả các thành viên tĩnh của liên minh được lưu trữ tại cùng một địa chỉ tương tự như các thành viên không tĩnh. Nhưng đó không phải là trường hợp. Một ví dụ đơn giản cho thấy các thành viên tĩnh được lưu trữ ở các địa chỉ khác nhau và có thể chứađộc lập 值。

int main()
{
Bạn bạn;
u.si = 10;
u.sl = 50;

std::cout << "Địa chỉ của các thành viên không tĩnh: " << &u.i << " " << &u.l << std::endl;
std::cout << "Địa chỉ của các thành viên tĩnh: " << &u.si << " " << &u.sl << std::endl;
std::cout << "Giá trị thành viên tĩnh: " << u.si << " " << u.sl << std::endl;
return 0;
}

Đầu ra:

Địa chỉ thành viên không tĩnh: 006FF8EC 006FF8EC
Địa chỉ thành viên tĩnh: 00AEB144 00AEB140
Giá trị thành viên tĩnh: 10 50

Tôi không hiểu tại sao việc lưu trữ giá trị độc lập lại được kết hợp. Tôi nghĩ rằng điều này là sai lệch và không có ý nghĩa. Tuy nhiên, theo tôi, việc này có lý do. union Mục đích của thành viên tĩnh là gì?

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

Bạn có thể nhìn điều này từ hai góc độ.

Phối cảnh C++:

Đoàn thể trước hết là một giai cấp. Mục đích của nó khác với lớp học, nhưng nó được thông báo bởi lớp học đó là gì.

Union là một lớp và chỉ có một đối tượng con thuộc bất kỳ loại nào là sự kiện. Để làm điều này, nó thay đổi cách hoạt động của các đối tượng thành viên của liên minh. Đây cũng là một liên minh và không thể được phép.lớp cơ sởMột phần lý do cho các đối tượng trẻ em.

Các thành viên dữ liệu tĩnh không phải là các đối tượng con thành viên, do đó cấu hình của chúng trong một liên kết sẽ không khác với cấu hình của chúng trong các lớp không liên kết.

Hơn nữa, các thành viên tĩnh của các kiểu trong C++ thực sự chỉ là một cơ chế xác định phạm vi cho tên hàm và đối tượng. Chúng thực sự vẫn mang tính toàn cầu, nhưng chúng có thể ở chế độ riêng tư và ẩn, đồng thời chúng phải được thêm tiền tố bằng tên loại của chúng để bạn có thể sử dụng chúng.

Hành vi của các thành viên dữ liệu tĩnh của một hợp không khác với hành vi của các thành viên dữ liệu tĩnh của một lớp.

Ý tưởng rằng C++ phải tương thích với C:

Sự kết hợp tồn tại trong C nên C++ cũng phải có sự kết hợp. Nhưng các hợp nhất rất khó xác định trong mô hình đối tượng C++, khó sử dụng và có nhiều vấn đề khác. Do đó, bạn có thể coi hợp nhất là thứ mà C++ cần nhưng không muốn xử lý. Vậy bạn sẽ làm gì với chúng?

Khi giải quyết cách thức hoạt động của các công đoàn C, bạn có thể làm cho các công đoàn hoạt động giống như C. Không có thứ gọi là thành viên tĩnh trong C, vì vậy không có mã C nào mong muốn kết hợp các thành viên liên minh tĩnh. Vì vậy... đừng kết hợp chúng. Nếu người dùng thực sự cần một thành viên tĩnh là phần thân hợp nhất của một số tập hợp loại, họ có thể dễ dàng tạo phần thân hợp nhất và tạo một thành viên tĩnh duy nhất của loại đó.

Vì vậy, người dùng không mất đi bất kỳ tính biểu cảm nào bằng cách làm cho các thành viên tĩnh trở nên khác biệt.

Giới thiệu về c++ - Tại sao các thành viên tĩnh của liên kết không được lưu trữ dưới dạng liên kết? , 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/55540587/

27 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