Có ai từng thấy lớp lưu trữ tự động sử dụng trong c/C++ không? Nếu vậy, trong tình huống nào?auto c/C++
Trả lời
tự động không bao giờ hữu ích trong C/C++ hiện tại vì tất cả các biến đều tự động ẩn. Nó rất hữu ích trong C++ 0x, nơi nó có thể thay thế hoàn toàn việc khai báo kiểu - nếu bạn có một biến có gán ban đầu, 'tự động' sẽ chỉ làm cho nó là kiểu giá trị gán, như trong các chú thích.
Không, giả định nếu bạn bỏ qua trình chỉ định lớp. Cách sử dụng hợp lý duy nhất mà tôi có thể nghĩ đến là gọi sự chú ý đến một biến cục bộ cụ thể ghi đè, nói, một biến toàn cục có cùng tên, hoặc như một câu hỏi phỏng vấn.
Rất có thể, bạn sẽ nhầm lẫn giữa lập trình viên kém, những người bị kẹt khi duy trì mã!
Tôi chưa thấy auto
được sử dụng trong mã được viết trong 10 năm qua. Không có lý do gì để sử dụng auto
vì chỉ những địa điểm bạn mới có thể sử dụng số là nó được ngụ ý ở đâu. Lý do duy nhất nó vẫn tồn tại là cho khả năng tương thích ngược nhưng cần tránh trong mã mới.
Như Alex đã được bảo hiểm, ô tô được sử dụng trong C++ 0x để khai báo các loại trong tờ khai khởi nơi các loại được suy ra từ mã khởi động.
Có đề xuất cho nó cũng được sử dụng làm kiểu trả về, trong đó loại được suy ra từ mã trả về một giá trị. Tuy nhiên điều này đã dẫn đến một sự mơ hồ như vậy, tại thời điểm viết, một cái gì đó phù hợp hơn với cú pháp lambda C++ 0x đang được xem xét.
Trong GCC bạn có thể cần tự động khai báo hàm lồng nhau để có thể xác định nó bất cứ nơi nào trong cơ thể của chức năng - xem http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Nested-Functions.html
Ngay ở đầu trang đó, nó nói rằng các hàm lồng nhau không được hỗ trợ cho GNU C++. Vậy công cụ tự động liên quan đến các hàm lồng nhau có áp dụng cho các cài đặt khác của C++ không? – c0m4
@ c0m4: Sẽ an toàn nhất để giả định rằng các phần mở rộng của GNU C như các hàm lồng nhau không có sẵn với các trình biên dịch khác. –
Dưới đây là một ví dụ từ mã của tôi, viết bằng C++ 11:
c_srgb find_in_book(const c_HVC &HVC) {
auto b = munsell.mun_to_rgb_book.find(HVC);
if(b != munsell.mun_to_rgb_book.end()) {
c_srgb f = b->second;
return f;
} else {
c_srgb ret;
ret.r=ret.g=ret.b=0;
return ret;
}
}
tôi thích đó đến nay:
c_srgb find_in_book(const c_HVC &HVC) {
std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<dj::color::c_HVC,dj::color::c_srgb,std::less<dj::color::c_HVC>,std::allocator<std::pair<const dj::color::c_HVC,dj::color::c_srgb>>,false>>> b = munsell.mun_to_rgb_book.find(HVC);
if(b != munsell.mun_to_rgb_book.end()) {
c_srgb f = b->second;
return f;
} else {
c_srgb ret;
ret.r=ret.g=ret.b=0;
return ret;
}
}
- 1. Gọi/cc là gì?
- 2. CSS auto-width Layout mà không margin: auto
- 3. Cụ thể về cuộc gọi/cc
- 4. Quá trình ngắt bằng CC .NET
- 5. CC? = Trong Makefile có nghĩa là gì?
- 6. Trong makefiles CC và LD là gì?
- 7. Python Auto Nhập
- 8. SVN Auto Update
- 9. Heroku MySQL Auto Increment
- 10. Vim auto line-break
- 11. Auto-RowHeight trong wpf.DataGrid
- 12. PHP auto bao gồm
- 13. RSS Auto Discovery
- 14. Hibernate Auto Increment ID
- 15. ASP.NET Auto Complete DropDownList
- 16. Resharper Auto Complete Statement
- 17. decltype vs auto
- 18. Textarea Auto chiều cao
- 19. UITextView Auto Chiều cao
- 20. Các mã như đầu ra CC, LD và CC [M] khi biên dịch hạt nhân Linux là gì?
- 21. Visual Studio 2008 Auto Save
- 22. Auto-Completion Trong wxPython wxComboBox
- 23. Khi không sử dụng `auto &&`?
- 24. Mã nguồn Ruby Auto-Formatter
- 25. Auto vector hóa trong llvm
- 26. C# Class Auto increment ID
- 27. Auto Increment Composite Key InnoDB
- 28. Phần mở rộng tệp mã C++? .cc vs .cpp
- 29. python: cách gửi thư bằng TO, CC và BCC?
- 30. Cú pháp JavaScript này là gì: {Ci, CC}?
Ông có thể bao gồm một ví dụ về C++ 0x sử dụng không? – c0m4
auto funcptr = std :: tr1 :: bind (& Foo :: Bar, this, _1, _2); Điều này tuyên bố "funcptr" có cùng kiểu như trả về "bind" (đây là một kiểu phức tạp nghiêm trọng), trong những ngày cũ, bạn sẽ bọc nó trong một mẫu std :: tr1 :: nhưng với auto bạn don không cần phải làm điều đó nữa). –
Đây có phải là trường hợp đặc biệt hay không hoạt động tổng quát hơn, chẳng hạn như tự động someVar = functionThatReturnsUnknownType(); ? – c0m4