Trang Chủ Tài chính Cá nhân Mạnh mẽ Typed Enumerations trong C + + - núm vú

Mạnh mẽ Typed Enumerations trong C + + - núm vú

Video: THAY TÔI YÊU CÔ ẤY (ĐNSTĐ) | OFFICIAL MV 4K | THANH HƯNG 2025

Video: THAY TÔI YÊU CÔ ẤY (ĐNSTĐ) | OFFICIAL MV 4K | THANH HƯNG 2025
Anonim

Lập trình là tất cả về tính dễ đọc. Thật khó để viết và duy trì một chương trình mà bạn không thể đọc được (thực sự là không thể). Một phần của việc đọc một danh sách mã nguồn là hiểu những gì các con số được sử dụng trong chương trình đại diện. Sự trợ giúp cơ bản nhất mà C ++ cung cấp là phổ biến ở #define, như trong ví dụ sau đây:

#define PI 3. 141592653589793

Giải pháp này không quan trọng đối với các giá trị cá nhân, mặc dù nó # xác định cơ chế không phải là (nói đúng) một phần của C / C ++ vì bộ tiền xử lý chạy trước trình biên dịch. Để đáp lại điều đó, C ++ 2011 giới thiệu một biểu thức biểu thức hằng

constexpr long double PI = 3. 141592653589793;

Từ khoá constexpr đưa các hằng số vào lều C ++. PI này có một kiểu thực, giống như các biến C ++ khác. C ++ có thể tạo ra các thông báo lỗi với PI có ý nghĩa hơn nhiều so với các liên quan đến 3. 14159.

Các biểu thức liên tục là tốt đối với các giá trị hằng số riêng lẻ, nhưng các hằng số thường đại diện các tập hợp các sự kiện chứ không phải các hằng tự nhiên, như trong ví dụ sau:

#define DC_OR_TERRITORY 0 #define ALABAMA 1 #define ALASKA 2 #define ARKANSAS 3 // … và như vậy …

Có lẽ các hằng số này đang được sử dụng để xác định các trạng thái, có lẽ được sử dụng như một chỉ mục vào một mảng các đối tượng trạng thái hoặc như một giá trị trong một cơ sở dữ liệu ở đâu đó.

C + + từ lâu đã có một cơ chế cải tiến để xác định các loại hằng số này - đếm:

enum STATE {DC_OR_TERRITORY, // nhận được 0 ALABAMA, // được 1 ALASKA, // được 2 ARKANSAS, // … và Sớm…};

Từ khóa enum giới thiệu một dãy các hằng được gọi là "liệt kê". Trong trường hợp này, điều tra mang tên STATE. Mỗi phần của liệt kê này được gán giá trị bắt đầu từ 0 và tăng tuần tự bằng 1, do đó DC_OR_TERRITORY được định nghĩa là 0, ALABAMA được định nghĩa là 1, v.v. Bạn có thể ghi đè lên trình tự gia tăng này bằng cách sử dụng lệnh gán như sau:

enum STATE (DC, TERRITORY = 0, ALABAMA, ALASKA, // … và như vậy …};

Phiên bản này của STATE định nghĩa một phần tử DC, được cho giá trị 0. Sau đó định nghĩa một phần tử mới TERRITORY, cũng được gán giá trị 0. ALABAMA chọn với 1, giống như trước.

Trong thực tế, lập trình có thể sử dụng liệt kê để viết mã khá dễ đọc như sau:

double taxRate (STATE s) {return taxRatesByState [s];}

Vấn đề duy nhất với cách tiếp cận này là liệt kê này không tạo ra một loại mới (như bạn nghĩ).Trong thực tế, theo tiêu chuẩn, STATE chỉ là một tên khác cho int - và các hằng số ALABAMA, ALASKA, vân vân là tất cả các kiểu const int.

trình biên dịch gcc thực sự cung cấp một enum tuyên bố theo cách này một chút quyền lực hơn đơn giản gọi nó là một hình thức int. Bạn thực sự có thể quá tải các chức năng dựa trên một loại enum:

void fn (STATE s); void fn (int n); fn (ALASKA); // kích hoạt fn (STATE)

Tiêu chuẩn năm 2011 cho phép lập trình tạo một kiểu hoàn toàn mới bằng cách sử dụng từ khóa enum. Vì người sáng tạo của tiêu chuẩn mới không muốn phá vỡ mã hiện tại, tiêu chuẩn yêu cầu thêm một từ khoá phụ để xác định một kiểu điều tra, như trong ví dụ sau:

enum class STATE (DC, TERRITORY = 0, ALABAMA, ALASKA, // … và như vậy …};

Một lớp điều tra bây giờ là một loại quy mô đầy đủ như bất kỳ lớp người dùng định nghĩa khác. Những điều sau đây thậm chí không hợp pháp nữa vì hai lý do:

int s = ALASKA;

Trước tiên, ALASKA không đổi chỉ được định nghĩa trong không gian tên STATE. Do đó, tên của hằng là STATE:: ALASKA. Thứ hai, loại không phải là int nhưng STATE. Bạn không thể gán một giá trị của kiểu STATE thành một int.

STATE s = STATE:: ALASKA;

Lập trình viên có thể tái tạo một STATE vào một int nhưng cô ấy phải làm như vậy rõ ràng -chuyển đổi rõ ràng không cắt nó với các lớp đếm:

int n = (int) STATE:: ALASKA;

Loại enum mới này cũng có thể dựa trên một trong số các loại số đếm khác ngoài chỉ là int:

enum class STATE: char {DC, // … phần còn lại của khai báo giống
Mạnh mẽ Typed Enumerations trong C + + - núm vú

Lựa chọn của người biên tập

Khóa Autoexposure Settings trên Rebel T6i / 750D - núm vú

Khóa Autoexposure Settings trên Rebel T6i / 750D - núm vú

Để Giúp đảm bảo tiếp xúc thích hợp, Máy ảnh Rebel T6i / 750D liên tục đo ánh sáng cho đến khi bạn bấm nút chụp một cách đầy đủ để chụp ảnh. Ở chế độ tự động phơi sáng - có nghĩa là, bất kỳ chế độ nào nhưng M - máy ảnh cũng sẽ tiếp tục điều chỉnh cài đặt phơi sáng nếu cần. Đối với hầu hết các tình huống, cách tiếp cận này hoạt động rất tốt, kết quả là

Các chức năng trên Canon EOS Rebel T3 / 1100D của bạn - núm vú

Các chức năng trên Canon EOS Rebel T3 / 1100D của bạn - núm vú

Bạn truy cập nhiều Canon Các tính năng của máy ảnh EOS Rebel T3 / 1100D thông qua các menu nội bộ, đủ thuận tiện, xuất hiện trên màn hình khi bạn nhấn nút Menu, nằm trên góc trên bên trái của camera. Các tính năng được nhóm vào các menu được mô tả trong bảng dưới đây. Một số chức năng trình đơn và thậm chí cả các menu xuất hiện ...

Phim Trình đơn 2 trên Máy Canon EOS Rebel T6 / 1300D của bạn - núm vú

Phim Trình đơn 2 trên Máy Canon EOS Rebel T6 / 1300D của bạn - núm vú

Rebel T6 của bạn cung cấp bạn có một số cài đặt để tùy chỉnh phim. Đặt chế độ quay phim vào vị trí Movie và xem Movie Menu 2. Movie Menu 2 bao gồm các cài đặt sau: Movie Recording Size: Tùy chọn này xác định độ phân giải phim (kích thước khung hình, pixel), khung hình / giây (fps) tỉ lệ. Thiết lập này là ...

Lựa chọn của người biên tập

Làm thế nào để tạo một thư mục phát triển cho các dự án Ruby - núm vú

Làm thế nào để tạo một thư mục phát triển cho các dự án Ruby - núm vú

Bạn nên thiết lập một không gian trên ổ cứng cho công việc của bạn trong Ruby được lưu trữ. Các lập trình viên gọi các thư mục không gian này, nhưng bạn có thể xem chúng như các thư mục. Thiết lập thư mục và tệp của bạn tương đối giống nhau cho cả Mac và Windows. Đầu tiên, tạo một thư mục phát triển để giữ tất cả các Ruby của bạn ...

Làm thế nào để Thêm bộ nhớ trong Ruby bằng cách lưu trữ kết quả trong các biến

Làm thế nào để Thêm bộ nhớ trong Ruby bằng cách lưu trữ kết quả trong các biến

Trong Ruby, you thường đặt tên biến bằng cách sử dụng các chữ cái viết thường, số và dấu gạch dưới (_). Ruby mong muốn một biến bắt đầu với một chữ cái thường, và sau đó bạn có thể sử dụng bất kỳ sự kết hợp của chữ cái viết thường khác, số, hoặc gạch dưới. Quy ước Ruby là sử dụng "snakecase" khi đặt tên một biến. Snakecase tách các từ với một dấu gạch dưới, ...

Làm thế nào để Thực hiện Toán cơ bản trong Ruby - núm vú

Làm thế nào để Thực hiện Toán cơ bản trong Ruby - núm vú

Ruby bao gồm một tập hợp lớn và mạnh mẽ của khả năng tích hợp sẵn . Một trong những cơ bản nhất là khả năng làm số học đơn giản. Nhập 2 + 2 tại dấu nhắc irb và nhấn Return (Enter): 2. 2. 2: 010 & gt; 2 + 2 = & gt; 4 Wow, Ruby có thể làm toán học bạn đã học trong lớp mẫu giáo! Nhìn vào khác ...

Lựa chọn của người biên tập

Làm thế nào để chuyển đổi kiểu thành Vector Shapes and Paths trong Photoshop CS6

Làm thế nào để chuyển đổi kiểu thành Vector Shapes and Paths trong Photoshop CS6

Theo mặc định, kiểu thường được tạo bằng công cụ Type trong Photoshop CS6 là kiểu dựa trên vector, không phải dạng bitmap, loại rasterized. Nhưng bạn cũng có thể chuyển đổi kiểu thông thường (mỗi ký tự) sang các hình dạng vectơ riêng lẻ. Bạn có thể chỉnh sửa các hình dạng như bất kỳ hình dạng được tạo ra bằng các công cụ hình dạng, bằng cách thao tác các điểm neo, và các đoạn thẳng và cong. Bạn ...

Làm thế nào để Chuyển đổi Layer trong Photoshop CS6 - núm vú

Làm thế nào để Chuyển đổi Layer trong Photoshop CS6 - núm vú

Khi ghép nhiều ảnh trong Photoshop CS6, bạn sẽ không nghi ngờ phải biến đổi các lớp trong hình ảnh của bạn để phù hợp với nó vào bố cục của bạn. May mắn thay, Photoshop làm cho việc điều chỉnh tỉ lệ dễ dàng bằng cách cung cấp cho bạn các lệnh Chuyển đổi và Chuyển đổi Miễn phí trên trình đơn Chỉnh sửa. Chuyển đổi các layer gần như giống như việc chuyển đổi các lựa chọn, ngoại trừ bạn ...

Làm thế nào để Turn một lựa chọn vào một đường dẫn trong Photoshop CS6

Làm thế nào để Turn một lựa chọn vào một đường dẫn trong Photoshop CS6

Trong khi đang làm việc trong Photoshop CS6, bạn có thể tạo đường dẫn từ các lựa chọn hiện có. Có thể bạn sẽ không sử dụng tùy chọn này gần như thường xuyên khi bạn sử dụng tùy chọn để biến một đường dẫn thành một vùng lựa chọn, nhưng tùy chọn này có sẵn. Tạo một đường dẫn từ vùng chọn có thể có ích nếu bạn cần lưu một đường dẫn ...