gpt4 book ai didi

c++ - typeid/type_info 奇怪的行为

转载 作者:可可西里 更新时间:2023-11-01 18:15:43 28 4
gpt4 key购买 nike

为什么下面的例子:

#include <iostream>
#include <typeinfo>

template<typename T>
void fun(const T& param)
{
std::cout << "T = " << typeid(T).name() << std::endl;
std::cout << "param = " << typeid(param).name() << std::endl;
std::cout << (typeid(T)==typeid(param)) << std::endl;
}

int main(int, char**)
{
fun(1);
}

给出以下输出:

T is i
param is i
1

我知道 type_info::name() 行为依赖于实现。无论如何,我希望 operator== 返回 false(因为 param 是一个 const 引用,而不是一个整数)。

最佳答案

这是在标准中定义的:

5.2.8/5: If the type of the expression or type-id is a cv-qualified type, the result of the typeid expression refers to a std::type_info object representing the cv-unqualified type [Example:

class D { /* ... */ };
D d1;
const D d2;
typeid(d1) == typeid(d2); // yields true
typeid(D) == typeid(const D); // yields true
typeid(D) == typeid(d2); // yields true
typeid(D) == typeid(const D&); // yields true

—end example ]

关于c++ - typeid/type_info 奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41087252/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com