2013-03-14 28 views
25

Từ chủ đề. Tôi đã thấy thuật ngữ này trong một câu hỏi mà gần đây tôi đã hỏi, và rõ ràng đó là một thuật ngữ được thiết lập tốt, nhưng tôi không thể tìm thấy bất cứ điều gì trên stackoverflow."cv-unqualified" có nghĩa là gì trong C++?

+7

@Andrew: chỉ diễn đàn crappy. Hãy làm phong phú thêm stackoverflow. –

+0

@LihO: từ những gì tôi biết về stackoverflow, copypaste không phải là phương pháp ưa thích để giải quyết một câu hỏi. Nó thường bao gồm một tập hợp các câu trả lời cực kỳ chi tiết với các tham chiếu rất cụ thể đến các thông số kỹ thuật –

+2

@StefanoBorini: [kết quả thứ hai] (http://en.cppreference.com/w/cpp/language/cv) từ các vòng loại cv googling rõ ràng và đầy đủ. Không phải ở tất cả một diễn đàn crappy. – Antoine

Trả lời

28

Có các loại cơ bản và loại hợp chất. Loại cơ bản là các loại số học, voidstd::nullptr_t. Các loại hợp chất là mảng, hàm, con trỏ, tham chiếu, lớp, công đoàn, liệt kê và con trỏ tới các thành viên không tĩnh.

A cv-unqualified là loại bất kỳ trong số các loại đó.

Đối với bất kỳ loại cv-không đủ tiêu chuẩn, có ba tương ứng cv-trình độ loại:

  • const trình độ - với const cv-vòng loại
  • biến động có trình độ - với số volatile cv-qualifier
  • const-volatile-qualified - với cả hai constvolatile cv-qualifiers

Lưu ý, tuy nhiên, cv-qualifiers áp dụng cho một loại mảng thực sự áp dụng cho các phần tử của nó.

Loại cv-đủ điều kiện và cv không đủ điều kiện là khác biệt. Đó là int là một loại riêng biệt từ const int.

+2

wow, tôi không thể hiểu .. tại sao nó được đặt tên là 'cv-unqualified'? nó sẽ tốt hơn nếu bạn lần đầu tiên nói với chúng tôi 'ý nghĩa của nó' trước 'nó là gì'. tất nhiên bây giờ tôi biết cv là cho const và dễ bay hơi .. –

24

Loại là "cv-unqualified" nếu nó không có bất kỳ vòng loại cv nào. Giá trị cv là const hoặc volatile.

2

Nói chung nó có nghĩa là "cùng loại, nhưng với bất kỳ loại vòng loại cv nào bị xóa", vì vậy (ví dụ) phiên bản không hợp lệ của void volatile * const x sẽ là void *x.

Lưu ý rằng ở đây, tuy nhiên, tôi đang xóa các vòng loại cv khỏi cả hai con trỏ chính nó những gì nó trỏ đến. Trong hầu hết các trường hợp, cv-unqualified sẽ chỉ tham chiếu đến một đối tượng tại một thời điểm, do đó, phiên bản cv-unqualified của con trỏ sẽ vẫn là void volatile *x, trong khi phiên bản cv-unqualfied của điểm nó sẽ là void *const x.

6

cv là viết tắt của constvolatile (và hiếm khi mutable), hai thuộc tính đủ điều kiện cho một loại. Bạn có thể thao tác chúng với std::remove_const và các mục tương tự trong C++ 11.

Các cppreference trang web tuyệt vời gives you more thông tin.

Để trả lời câu hỏi của bạn, một loại cv-không đủ điều kiện hoặc không có hoặc được tước từ cv-vòng loại của nó. Ví dụ: int là phần không đủ tiêu chuẩn của const volatile int.

std::remove_cv<T>::type là phần cv-unqualified T.

+0

Tôi đã làm, nhưng nó không có ở đây. Tôi muốn nó ở đây. –

+0

Nhưng nó là! [Câu hỏi này] (http: // stackoverflow.com/questions/3610943/correlation-between-specifier-and-qualifier) ​​chẳng hạn là trên cùng một chủ đề nhưng poster cho thấy anh ta đã thực hiện một số nghiên cứu để hiểu một số vấn đề cơ bản nhưng bị nhầm lẫn bởi một số điểm cụ thể. Tôi tin vào tinh thần của trang web này. – Antoine

+1

Nó không phải là. Tiêu đề của câu hỏi không truyền đạt nội dung của nó. Tôi muốn bất cứ ai có cùng một câu hỏi như tôi đã đi trên google và hỏi "những gì hiện cv không đủ tiêu chuẩn có nghĩa là" và nhận được câu hỏi này, nơi nó được giải thích rõ ràng. Trên một mặt lưu ý, tôi nghĩ rằng hành vi giống như piranha của cộng đồng stackoverflow chống lại các câu hỏi hợp lý nhưng "dễ nhận thức" thực sự đáng ghét, và nếu có một giải pháp thay thế, tôi đã chuyển sang. Bình tĩnh người chết tiệt –

9

cv-không đủ tiêu chuẩn loại là một loại mà chưa được quy định bởi bất kỳ cv-vòng loại. Các giá trị này xác định hai thuộc tính cơ bản của một loại: constnessbiến động. Xem C++ 03 3.9.3 CV-vòng loại §1:

Một loại nêu tại 3.9.1 và 3.9.2 là một cv-không đủ tiêu chuẩn loại. Mỗi loại mà là một hoàn chỉnh hoặc không đầy đủ loại đối tượng cv-không đủ tiêu chuẩn hoặc là void (3.9) có ba phiên bản cv có trình độ tương ứng của loại của nó:

  • một phiên bản const trình độ,
  • một dễ bay hơi -qualified phiên bản và
  • a const-volatile-qualified phiên bản.

Loại đối tượng hạn (1.8) bao gồm các ký hiệu vòng loại cv được chỉ định khi đối tượng được tạo.

Sự hiện diện của một specifier const trong một decl-specifier-seq tuyên bố một đối tượng của const đủ tiêu chuẩn loại đối tượng; đối tượng đó được gọi là const object.

Sự hiện diện của một specifier volatile trong một decl-specifier-seq tuyên bố một đối tượng của volatilequalified loại đối tượng; đối tượng đó được gọi là volatile object.

Sự hiện diện của cả cv-vòng loại trong một declspecifier-seq tuyên bố một đối tượng của const-volatile đủ tiêu chuẩn loại đối tượng; đối tượng đó được gọi là const volatile object.