gpt4 book ai didi

c++ - 为什么 typeid 不像 sizeof 那样是编译时常量

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:53:52 26 4
gpt4 key购买 nike

为什么 typeid(someType) 不像 sizeof(someType) 那样是常量?

出现这个问题是因为最近我尝试了类似的东西:

template <class T>
class Foo
{
static_assert(typeid(T)==typeid(Bar) || typeid(T)==typeid(FooBar));
};

而且我很好奇为什么编译器在编译时知道类型的大小 (sizeof),但不知道类型本身 (typeid)

最佳答案

当您处理类型时,您宁愿使用简单的元编程技术:

#include <type_traits>

template <class T>
void Foo()
{
static_assert((std::is_same<T, int>::value || std::is_same<T, double>::value));
}

int main()
{
Foo<int>();
Foo<float>();
}

is_same 可以这样实现:

template <class A, class B>
struct is_same
{
static const bool value = false;
};

template <class A>
struct is_same<A, A>
{
static const bool value = true;
};

typeid 可能不是编译时的,因为它必须处理运行时多态对象,而这正是您宁愿使用它的地方(如果有的话)。

关于c++ - 为什么 typeid 不像 sizeof 那样是编译时常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1981413/

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