You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何T1与T2的typeid相同但实际类型不同?(输出为1 0)

问题原因解析
  • T1与T2的真实类型差异:
    字符串字面量"A"的类型是const char[2],且它属于左值表达式。根据decltype的推导规则,当表达式是左值(非单个标识符)时,decltype会返回该表达式类型的左值引用。所以T1的实际类型是const char(&)[2](对长度为2的const char数组的引用),而T2是直接定义的const char[2](普通数组类型),二者本质是不同类型。

  • typeid判断为相同的原因:
    typeid在处理引用类型时会自动忽略引用修饰,直接返回被引用类型的std::type_info对象。也就是说typeid(T1)等价于typeid(const char[2]),和typeid(T2)指向同一个类型信息实例,因此比较结果为真(输出1)。

  • std::is_same_v判断为不同的原因:
    std::is_same会严格匹配类型的所有属性,包括引用、const、volatile等修饰符。T1是数组引用类型,T2是数组类型,属于完全不同的类型范畴,所以std::is_same_v<T1,T2>返回假(输出0)。

你可以通过以下代码验证这个结论:

#include <iostream>
#include <type_traits>

int main()
{
  using T1 = decltype("A");
  using T2 = const char[2];
  using T3 = const char(&)[2];
  std::cout << std::is_same_v<T1,T3> << "\n"; // 输出1,证明T1是数组引用类型
}

内容的提问来源于stack exchange,提问作者Helmut Zeisel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 19:27:54