有人能解释一下这里发生了什么吗? 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类型丢失了,而它变成了什么?
答案 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