自动初始值设定项类型ID 信息
auto initializer typeid info
根据 C++17 初始值设定项规则,应该int
auto x{123};
,但在 C++11/C++14 模式下使用不同的编译器尝试此操作将显示一些编译器会将其推断为int
而其他人会将其推断
std::initialzer_list<int>
我使用 C++17 只是为了测试它
#include<iostream>
#include <typeinfo>
int main()
{
auto x{123};
auto y={1,2};
std::cout<<"Type is "<<typeid(x).name()<<std::endl;
std::cout<<"Type is "<<typeid(y).name()<<std::endl;
}
输出
Type is i
Type is St16initializer_listIiE
Program ended with exit code: 0
不应该显示吗 预期输出
Type is int
如以下参考代码中所示
https://en.cppreference.com/w/cpp/language/typeid
std::type_info::name 返回的名称是实现定义的,不能保证返回"int"
。
返回一个实现定义的以 null 结尾的字符串,其中包含类型的名称。不提供任何保证;特别是,返回的字符串对于几种类型可以是相同的,并且可以在同一程序的调用之间更改。
另一方面,您可以在编译时获取类型信息(使用未定义的类模板)。它也取决于编译器,但通常更清楚。(这个想法来自有效的现代C++(斯科特·迈耶斯)项目#4:知道如何查看推导的类型。
template <typename>
struct TD;
int main()
{
auto x{123};
auto y={1,2};
TD<decltype(x)> td1;
TD<decltype(y)> td2;
}
然后,您将从编译错误消息中获取类型信息,例如 Clang:
source_file.cpp:12:21: error: implicit instantiation of undefined template 'TD<int>'
TD<decltype(x)> td1;
^
source_file.cpp:13:21: error: implicit instantiation of undefined template 'TD<std::initializer_list<int> >'
TD<decltype(y)> td2;
^
使用您的代码,x{123}
计算结果为 int,因为这就是您传递的。但是,使用 y,您已经向它传递了一个整数列表。它推断出它是一个initializer_list
,因为这是默认类型,根据此示例在initializer_list构造中使用。
#include <iostream>
#include <typeinfo>
#include <initializer_list>
class Test
{
public:
Test(std::initializer_list<int> ints) {
for (auto i : ints)
{
std::cout << i << std::endl;
}
}
};
int main()
{
auto x{ 123 };
auto y = { 1,2 };
std::cout << "Type is " << typeid(x).name() << std::endl;
std::cout << "Type is " << typeid(y).name() << std::endl;
Test t{ 1, 2, 3 };
std::cin.get();
}
相关文章:
- 使用类型id运算符的最佳替代方法
- 类型ID,如何仅获取类型名称
- 自动初始值设定项类型ID 信息
- 类型ID指针和引用比较差异?
- gcc 发出了与解析新表达式中的类型 ID 相关的错误
- 我可以从静态基方法获取当前类类型 ID 吗?
- 关于C++中的类型id函数
- reinterpret_cast<类型ID>"type-id"可以是变量吗?
- 我想看到一个在整个后缀表达式的上下文中查找转换类型 id 的示例
- 每种类型的编译时类型ID
- C++模板和类型 ID
- C++类型比较:类型 ID 与双重调度dynamic_cast
- 编译时生成的常量类型 ID
- 类型id(T) 是在运行时还是在编译时被计算
- 如何在编译时生成密集的唯一类型ID
- 类型ID 和type_info类
- 函数未在类型id中调用
- 多态指针的类型id
- 类型id结果不匹配
- 类型ID的成本是多少?