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++?
Trả lời
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, void
và std::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
const
vàvolatile
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
.
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 .. –
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
.
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ó và 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
.
cv là viết tắt của const
và volatile
(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
.
Tôi đã làm, nhưng nó không có ở đây. Tôi muốn nó ở đây. –
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
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 –
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: constness và biế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
.
- 1. "class:" có nghĩa là gì trong C++?
- 2. Có nghĩa là gì trong C++?
- 3. EPS có nghĩa là gì trong C?
- 4. '&' có nghĩa là gì trong C++?
- 5. "() =>" có nghĩa là gì trong C#?
- 6. Điều gì: :: có nghĩa là trong C++?
- 7. 0u có nghĩa là gì trong C#?
- 8. () => có nghĩa là gì trong C#?
- 9. ** nghĩa là gì trong C
- 10. Làm gì? trong C nghĩa là gì?
- 11. Mã C++ này có nghĩa là gì?
- 12. '??' có nghĩa là trong C#?
- 13. Chữ "nghĩa đen" trong C++ là gì?
- 14. Nghĩa là gì trong mục tiêu-c?
- 15. '~' có nghĩa là gì trong python?
- 16. Ý nghĩa của '==' trong C là gì?
- 17. gì dấu hỏi đôi có nghĩa là trong C#
- 18. Đường ống thẳng đứng (|) có nghĩa là gì trong C++?
- 19. Hoạt động "| =" có nghĩa là gì trong C++?
- 20. Điều gì -> có nghĩa là trong C++?
- 21. Dấu mũ (‘^’) có nghĩa là gì trong C++/CLI?
- 22. Toán tử '=>' có nghĩa là gì trong C#?
- 23. "void" mới có nghĩa là gì trong C++?
- 24. gì <c-r> = có nghĩa là trong Vim
- 25. Thread_local có nghĩa là gì trong C++ 11?
- 26. 0xFE có nghĩa là gì trong chương trình C?
- 27. 'Return * this' có nghĩa là gì trong C++?
- 28. Trong C# 'nơi T: lớp' có nghĩa là gì?
- 29. Asterisk * có nghĩa là gì trong Mục tiêu-C?
- 30. Cái gì ?? điều hành có nghĩa là trong C#?
@Andrew: chỉ diễn đàn crappy. Hãy làm phong phú thêm stackoverflow. –
@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 –
@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