Vì lợi ích của bảo trì tôi thích danh sách cú pháp VỚI biến xác định một cách rõ ràng như sau:
counter_t counter = {.hour = 10, .min = 30, .sec = 47};
hoặc trả lại inline ví dụ:
return (struct counter_t){.hour = 10, .min = 30, .sec = 47};
tôi có thể tưởng tượng một kịch bản mà một thay đổi thứ tự các biến được khai báo và nếu bạn không xác định rõ ràng các biến của mình, bạn sẽ phải trải qua tất cả mã để sửa thứ tự các biến. Bằng cách này, nó là sạch hơn và dễ đọc hơn tôi nghĩ
Side-note:
Như @AshleyDuncan và @MM đặt, tính năng này đã bị xóa khỏi ISO C++ sau khi C99 https://stackoverflow.com/a/12122261/2770195, nhưng được hỗ trợ trong gnu C++.
Vì vậy, trong khi bạn có thể làm điều này chỉ tốt:
g++ -std=gnu++11 main.cpp -o main
này sẽ ném ra một lỗi nếu bạn cố gắng ví dụ trên:
# need an example. I was unable to find. Even clang++ supports it. If you know
# one, please suggest an edit
Nếu bạn cần phải biên dịch với C++ biên dịch với sự hỗ trợ đối với ISO C++ 11 hoặc mới hơn không nhận ra phần mở rộng gnu này, bạn có thể phải sử dụng một lớp với một hàm tạo đơn giản:
// backup workaround
// not cool
class gnuFTW {
public:
int hour;
int min;
int sec;
gnuFTW(int hour, int min, int sec) {
this->hour = hour;
this->min = min;
this->sec = sec;
}
};
int main(int argc, const char * argv[]) {
gnuFTW counter = gnuFTW(10,30,47);
cout << counter.hour << endl;
return 0;
}
Điều đó sẽ hiệu quả. –
Có vẻ như nó hoạt động nếu tôi khai báo trong cùng một dòng như vậy 'counter_t counter = {10,30,47}' nhưng không phải nếu tuyên bố đã được thực hiện trước khi phân công này. – mindthief
@Oli: Tại sao nó hoạt động? Như văn bản đó là một nhiệm vụ, không phải là khởi tạo. – sth