2013-09-05 38 views

Trả lời

11

Tên (identi fi er) bao gồm một chuỗi các chữ cái và chữ số. Ký tự đầu tiên phải là một chữ cái. Ký tự gạch dưới, _, là được coi là một chữ cái.

Từ ngôn ngữ lập trình C++, ấn bản thứ 4.

+4

Bạn có thể suy ra từ câu nói rằng câu trả lời là "có", nhưng nó sẽ là tốt đẹp để nói như vậy. –

11

Theo Stroustrup (ấn bản thứ 3, mục 4.9.3), số nhận dạng bao gồm một chuỗi các chữ cái và chữ số. Ký tự đầu tiên phải là một chữ cái. Ký tự gạch dưới được coi là một chữ cái.

Vì vậy, có, cần phải di động.

+2

Đánh bại bạn sau 2 giây! –

+0

Ngoài ra, trong tiêu chuẩn [C++] (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3242.pdf) (2.11). – nickie

3

Có. một đơn _ sẽ được chấp nhận là biến hoặc bất kỳ tên định danh/không gian tên nào! Ví dụ. google mock sử dụng tính năng này.

+0

Boost.MPL cũng vậy. http://www.boost.org/doc/libs/1_54_0/libs/mpl/doc/refmanual/placeholders.html –

0

Vâng, đó là tiền tố hợp lệ. Chạy

#include <iostream> 

using namespace std; 

int main() 
{ 
char* _ = "Hello World"; 
cout << _ << endl; 
return 0; 
} 

in "Hello World" như mong đợi. Đây không phải là tên có thể thay đổi hữu ích nhưng có giá trị

+3

Biên dịch hoặc chạy nó không đảm bảo tuân thủ các tiêu chuẩn hoặc tính di động. –

+1

@WayneMcGee: Trừ khi bạn có quyền truy cập vào LOTS của trình biên dịch [mặc dù nó có khả năng thất bại hoặc thành công trong một trình biên dịch khi điều ngược lại xảy ra] hoặc yêu cầu trình biên dịch nghiêm ngặt về tiêu chuẩn [và một lần nữa, độ nghiêm ngặt có thể là chủ đề lỗi trình biên dịch]. –

7

Có, _ là số nhận dạng hợp lệ vì nó đáp ứng các yêu cầu cú pháp. Về cơ bản, số nhận dạng bao gồm dấu gạch dưới hoặc chữ cái, tiếp theo là số không hoặc nhiều ký tự khác có thể là dấu gạch dưới, chữ cái hoặc chữ số. (Kể từ C++ 2011, số nhận dạng cũng có thể chứa tên ký tự phổ biến và các ký tự được xác định khác, nhưng không liên quan đến câu hỏi của bạn.)

Nhưng nó có thể không phải là mã bạn nên sử dụng trong mã của riêng bạn trừ khi bạn ' rất cẩn thận.

Như this answer nói, trích dẫn tiêu chuẩn 2003 C++:

Mỗi tên bắt đầu với một dấu gạch dưới được dành riêng để thực hiện để sử dụng như một tên trong không gian tên toàn cầu.

biến _ bạn không phải là trong không gian tên toàn cầu, vì vậy bạn đang an toàn trong trường hợp này, nhưng đó là một ý tưởng tốt để tránh việc xác định bất kỳ định bắt đầu với một dấu gạch dưới.

Ngoài ra, tôi tin rằng GNU gettext (cung cấp hỗ trợ cho các thư được bản địa hóa) sử dụng tên _ cho mục đích riêng của nó. (Nó được cho là một ý tưởng tồi cho GNU gettext làm điều này, nhưng nó là một sự lựa chọn thuận tiện.)

+0

Không phải điều này (GNU gettext convention) xung đột với quy tắc đặt tên C++? Tôi đọc rằng tên toàn cầu * bắt đầu * với dấu gạch dưới bị cấm? – Wolf

+1

@Wolf: Chúng không chính xác * bị cấm *, nhưng chúng được bảo lưu. Có, tôi tin rằng việc sử dụng '_' của gettext vi phạm cả hai yêu cầu C và C++ - nhưng miễn là việc triển khai thực sự không sử dụng' _', nó không có khả năng gây ra các vấn đề thực tế. –