2013-02-10 32 views
5

Trong C# tôi có thể làm điều này:Mảng khởi khi sử dụng mới

char[] a = new char[] {'a', 'a', 'a'}; 

Nhưng tôi có thể làm một cái gì đó như thế trong C++? Tôi đã thử:

char *a = new char [] {'a', 'a', 'a'}; 

Nhưng nó không biên dịch.

+1

Thử 'char a [] = {'a', 'a' , 'a'}; '. Dễ dàng hơn nhiều! –

+1

Chỉ định kích thước: 'char * a = new char [3] {'a', 'a', 'a'}; ' – jrok

Trả lời

6

Đây là lỗi trong thông số C++ (không cho phép cấu trúc đơn giản này biên dịch). Bạn cần cung cấp kích thước

char *a = new char [3] {'a', 'a', 'a'}; 

Xem http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#1469. Lưu ý rằng nếu bạn ngoặc đơn tên loại, nó là loại id và không phải là new-type-id và do đó cú pháp cho phép bạn bỏ qua biểu thức kích thước. Vì vậy, bạn có thể tìm thấy một thực hiện cho phép bạn nói

char *a = new (char[]){'a', 'a', 'a'}; 

Mặc dù đây rõ ràng là nó không phải là ý định rõ ràng rằng đây là có thể (và một số quy tắc trong new đoạn văn có thể được hiểu cấm nó).

+1

Tôi không nghĩ rằng 'mới' nên được sử dụng ở đây cả. Sử dụng ngăn xếp hoặc vùng chứa. – Inverse

+0

@inverse bạn nên thêm điều đó vào câu hỏi dưới dạng nhận xét. tôi không đề nghị bất cứ điều gì trong câu trả lời của tôi. tôi chỉ cố định cú pháp của anh ấy. –

+0

tất cả các câu trả lời nói về mảng ngăn xếp hoặc vectơ không thực sự trả lời câu hỏi của ông về cú pháp mới. –

3

Tôi nghĩ rằng những gì bạn muốn là thế này:

const char a[] = {'a', 'a', 'a'}; 
6

tại sao không chỉ làm điều này? :

char a[] = {'a', 'a', 'a'}; 

Cũng tránh sử dụng hoàn toàn mảng. Sử dụng std::vector

+0

Thật tuyệt vời khi thêm một cái gì đó vào khởi tạo cho' std :: vector', như " nếu bạn đủ may mắn để có một trình biên dịch hỗ trợ C++ 11 thì bạn có thể làm như vậy. " –

+0

@AntonKovalenko Tôi hiện không ở trên C++ 11, trọng tâm của tôi đã chuyển sang C#. Nhưng tôi sẽ không nhớ nếu bạn muốn thêm một cái gì đó vào câu trả lời :-) –

1

Có, bạn có thể làm điều đó như;

char a[] = {'a', 'a', 'a'}; 

Check-out Arrays (C++) từ MSDN.

4

Có thể bạn không muốn sử dụng mảng trong C++. Sử dụng một số std::vector để thay thế.

Bạn thậm chí có thể khởi chạy nó thành 3 'a's.

std::vector<char> vectorOfChars(3, 'a'); 

Nếu trình biên dịch của bạn hỗ trợ C++ 11, bạn thậm chí có thể sử dụng danh sách khởi tạo.

std::vector<char> vectorOfChars{'a', 'a', 'a'}; 
0

chuỗi a = "aaa"; a [0], a [1] ..etc Điều này sẽ dễ dàng hơn nhiều nếu bạn muốn tạo chuỗi 2-D của chuỗi ..có

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