2012-08-10 33 views
31

Nếu tôi tạo một đối tượng liên kết const (ví dụ như mã bên dưới), thì không thể thực hiện việc gán thành viên trong đó. Vì vậy, có bất kỳ việc sử dụng làm cho một đối tượng const đoàn, trong mọi trường hợp?Việc sử dụng một đối tượng liên tục là gì?

union un 
{ 
    int i; 
    float f; 
    char c; 
}; 
const union un a; 
/// ! a.i = 10; error. 
+1

Trong 'c', không phải là hiếm khi diễn giải một công đoàn thông qua một thành viên khác với thành viên được đặt gần đây nhất. Và tất nhiên, nó có thể là 'const volatile' - nghĩa là chúng ta sẽ không thay đổi nó, nhưng ai đó có thể, và chúng ta cần có khả năng thấy điều đó. – BoBTFish

+4

Không nếu toàn bộ công đoàn chết tiệt là 'const'. – Puppy

+0

@Xeo, nó sẽ không biên dịch mà không có phần "công đoàn" khi tôi thử nghiệm với gcc. –

Trả lời

33

Bạn vẫn có thể khởi công đoàn như sau:

const union un a = { .i = 100 }; 

sau đó sử dụng nó trong mã của bạn.

+3

Trong C, nghĩa là. Trong C++, tôi nghĩ bạn có thể viết một hàm tạo và các công cụ như vậy. – Xeo

+0

Haha, bạn đã đánh bại tôi trong 35 giây. :-) –

+0

Đây là những gì tôi không biết. Bằng cách này, bất kỳ thành viên công đoàn nào cũng có thể được khởi tạo! – cirronimbo

15

Bạn vẫn có thể gán nó vào khai, ví dụ như thế này:

const union un a = {0}; 

Cập nhật: ký hiệu mà đặt đầu tiên của đoàn viên.

+2

Thành viên nào được thiết lập? –

+0

@ R.MartinhoFernandes, tất cả thành viên, đến số không. –

+0

Vâng, nhưng điều đó chỉ có thể được thực hiện để chỉ định thành viên đầu tiên (hoặc để đặt tất cả về 0, như bạn đã đề cập)! – cirronimbo

Các vấn đề liên quan