std::__1::basic_string是C++什么版本编译器
时间: 2024-06-02 19:13:10 浏览: 256
std::__1::basic_string是C++11标准中引入的标准库类basic_string的完整名称。它可以在任何支持C++11或更高版本的编译器中使用,如GCC 4.8及以上版本,Visual Studio 2013及以上版本等。注意,std::__1::basic_string是在libc++库中实现的,在libstdc++库中是std::basic_string。
相关问题
std::string和std::_c++11::string
在C++03中,基础字符串的定义是:std::basic_string<char>。而在C++11中,基础字符串变成了:std::__cxx11::basic_string<char>(libstdc++)或者std::__1::basic_string<char>(libc++)。这是因为C++11引入了一些新的特性,例如右值引用和移动语义,这些特性需要对标准库进行修改。因此,在C++11中,为了避免与旧版本的代码发生冲突,标准库的名称被修改了。如果你使用的是旧版本的编译器,那么你只能使用std::basic_string<char>。如果你使用的是新版本的编译器,那么你可以使用std::__cxx11::basic_string<char>(libstdc++)或者std::__1::basic_string<char>(libc++)。
std::vector<std::__cxx11::basic_string<char>>& 和 std::vector<std::string>&的区别是什么
`std::vector<std::__cxx11::basic_string<char>>&` 和 `std::vector<std::string>&` 都是指向 `std::vector` 中字符串类型的引用,但它们之间有一些细微的差异:
1. **类型表示**:
- `std::__cxx11::basic_string<char>` 是 C++11 之前(C++03)对 C++ 标准库中的 `std::string` 类型的内部表示,它是为了兼容 C++03 引入的。
- `std::string` 是 C++11 及以后的标准库中直接提供的字符串类型。
2. **模板参数**:
- 第一个表达式中,`__cxx11` 表明这个向量内元素类型是 `std::string`,但是使用的是 C++03 时期的编译器可能会识别到这是老版本的 `std::string`。
- 第二个表达式直接使用了 `std::string`,表示的是现代 C++ 标准中的字符串类型。
3. **编译兼容性**:
- 如果你的代码是在 C++11 或更高版本的环境中编译,使用 `std::vector<std::string>&` 更清晰、更推荐,因为它不会引入不必要的兼容性问题。
- 如果在 C++03 或早期版本中编译,`std::vector<std::__cxx11::basic_string<char>>&` 应该能正常工作,但可能不如 `std::vector<std::string>&` 易于理解和维护。
4. **性能**:
- 在 C++11 及以后,`std::string` 可能已经优化过内部实现,所以使用 `std::vector<std::string>&` 可能会带来更好的性能。
**相关问题--:**
1. 这两种引用有何在编译时的具体行为差异?
2. 如果要在 C++11 环境下,应该优先选择哪种?
3. `std::__cxx11::basic_string<char>` 与 `std::string` 之间存在哪些潜在问题?
阅读全文