2014-05-05 23 views
9

tôi đang xem xét một ví dụ từ spec chính thức:Lớp A * A; khai báo phân tích bằng C++?

class A * A; 

Tôi đã đọc rằng dòng này giới thiệu hai tên: class A mà có thể được truy cập thông qua chỉ xây dựng-specifier-type và con trỏ đến A. dòng này hoàn toàn tương đương với hai dòng sau?

class A; 
A * A; 

Đường đó chỉ là đường cú pháp và thực sự chúng tôi có hai dòng như tôi đã chỉ định ở trên? Hoặc làm thế nào là class A * A; phân tích bằng trình biên dịch?

+0

những gì hiện A * Một dòng làm, không có ý nghĩa –

+2

@TejasPatel nó tuyên bố một biến 'A' của loại' A * '. –

+0

@LuchianGrigore Trong ví dụ thứ hai, nó sẽ không gọi một nhà điều hành * nếu nó tồn tại? –

Trả lời

9

Có, khai báo nội dòng chỉ là đường cú pháp. Bạn đang chuyển tiếp tuyên bố rằng tên sử dụng tên đó trên cùng một dòng.

+0

Cảm ơn câu trả lời của bạn. Nhưng tôi đang cố gắng tìm một số thông tin về nó trong spec. Bạn có thể cho tôi tham khảo không? –

+1

cũng, thực tế là bạn _can_ khai báo một biến có cùng tên (trường hợp và tất cả) như một lớp không có nghĩa là bạn _should_ làm điều đó. : D – Massa

+0

Tôi không hiểu tại sao dòng này hợp lệ trong C++. Bạn có thể cho tôi một tài liệu tham khảo? –

8

Tôi đang tìm câu trả lời chi tiết hơn trong dự thảo làm việc N3797 và tôi đã tìm thấy những điều sau đây:

§8.3.3:

Do đó, một tuyên bố của một định danh riêng có dạng T D trong đó T có dạng attribute-specifier-seq_*opt* decl-specifier-seqD là người khai báo.

§7.1:

decl-specifier: 
    storage-class-specifier 
    type-specifier 
    function-specifier 
    friend 
    typedef 
    constexpr 
decl-specifier-seq: 
    decl-specifier attribute-specifier-seq_*opt* 
    decl-specifier decl-specifier-seq 

§7.1.6:

type-specifier: 
    trailing-type-specifier 
    class-specifier 
    enum-specifier 

§8.3.1:

Trong một tuyên bố T D nơi D có dạng * attribute-specifier-seq_*opt* cv-qualifier-seq_*opt* D1 và loại của định trong tờ khai T D1 là “có nguồn gốc-declarator-type-list T”, sau đó loại của các định danh của D là “có nguồn gốc-declarator-type -list cv-vòng-seq con trỏ đến T.”

Bây giờ class-specifier chứa class từ khóa bên trong. Do đó, class A * A là cấu trúc ngữ pháp hợp lệ, trong đó * A là người khai báo.

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