【发布时间】:2023-03-18 02:30:01
【问题描述】:
我知道对于 C++11 使用 auto 初始化 vector 的方法,实际上初始化了 std::initializer_list 而不是 vector。
但是,给出以下代码:
#include <iostream>
#include <vector>
using namespace std;
int main() {
auto x = {1, 2};
cout << typeid(x).name() << endl;
auto z = (1, 2);
cout << z << ", type: " << typeid(z).name() << endl;
return 0;
}
我不明白:
- 为什么返回的
x的类型是St16initializer_listIiE而返回的'z' 的类型是'i',使用gcc-10 编译器。我们不应该只返回std::initializer_list和'int'吗? -
z上有警告:warning: left operand of comma operator has no effect [-Wunused-value]。然后结果的第二半是:2, type: i。 c++11如何解释()-initialized类型?为什么只有最后一个元素传递给z,因此z仍然是int类型?
【问题讨论】:
-
type_info::name不需要生成类型的实际名称;这是一个实现定义的值。 -
如果你想要去杂乱的名字,你可以使用 Boost 的Demangle 把它们变成更清晰的字符串。
标签: c++ c++11 initializer-list auto