std :: string类型在元组中丢失

时间:2016-03-25 16:28:01

标签: string templates c++11 tuples

有人能解释一下这里发生了什么吗? GCC 5.2的输出:

#include <iostream>
#include <tuple>
#include <string>
#include <typeinfo>

template <typename... Args>
void foo (Args&&... args) {
    std::tuple<Args...> t = std::tie(args...);
    std::cout << std::is_same<int, std::tuple_element_t<0, decltype(t)>>::value << '\n';  // true
    std::cout << std::is_same<std::string, std::tuple_element_t<1, decltype(t)>>::value << '\n';  // false
    std::cout << typeid(std::tuple_element_t<1, decltype(t)>).name() << '\n';  // A3_C (what's this???)
}

int main() {
    foo (5, "hi");
}

为什么std :: string类型丢失了,而它变成了什么?

2 个答案:

答案 0 :(得分:4)

"string" - 是const char[N]数组,不是 std::string。在这种情况下const char[] = {'h', 'i', '\0'} -> const char[3] -> 数组 3 类型为char的元素(A3_C)。 使用std::string("hi")创建字符串或启用用户文字并编写"hi"s

答案 1 :(得分:1)

"hi"(字符串文字)的类型为const char[3],而不是std::string