Tôi đã sử dụng std :: rbegin và std :: rend trong MSVC 2013. Khi tôi cố gắng biên dịch mã của tôi bằng GCC 4.9.1 hoặc clang 3.5.0, cả hai đều cho tôi biết rằng 'rbegin' và 'rend' không phải là một phần của không gian tên 'std'.std :: rbegin và std :: hàm rend trong GCC 4.9 và clang 3.5
Xem ví dụ mã bên dưới. Tôi có làm điều gì sai hay đơn giản là họ chưa thực hiện trong GCC và kêu vang?
// test.cpp
#include <vector>
#include <iostream>
#include <iterator>
int main(int, char**)
{
std::vector<int> test = {1, 2, 3 ,4, 5};
for (auto it = std::rbegin(test); it != std::rend(test); ++it) {
std::cout << *it << ", ";
}
std::cout << std::endl;
return 0;
}
đầu ra GCC:
g++ --std=c++14 test.cpp -o test && ./test
test.cpp: In function ‘int main(int, char**)’:
test.cpp:10:20: error: ‘rbegin’ is not a member of ‘std’
for (auto it = std::rbegin(test); it != std::rend(test); ++it) {
^
test.cpp:10:45: error: ‘rend’ is not a member of ‘std’
for (auto it = std::rbegin(test); it != std::rend(test); ++it) {
^
đầu ra kêu vang là tương tự, được tạo ra với:
clang++ --std=c++14 test.cpp -o test && ./test
Bạn đang so sánh GCC với Clang nhưng cả hai đều sử dụng libstdC++ theo mặc định và nó thực sự là triển khai thư viện chuẩn mà bạn nên so sánh. –