例如,C++0x auto 关键字的含义是什么?

2024-03-10

auto a = (Foo<T>*)malloc(sizeof(Foo<T>));
auto *b = (Foo<T>*)malloc(sizeof(Foo<T>));

我认为模板的存在并不重要,但问题是:a and b相同类型的?

g++ -std=c++0x -Wall(4.4) 没有给出任何错误或警告,但我还没有运行该程序,所以我不知道它是否做了同样的事情。

这是否意味着对于a, auto is Foo<T>*, 但对于b, auto is Foo<T>?


are a and b相同类型的?

让我们来看看吧?

#include <cstdlib>
#include <type_traits>

template <typename T>
struct Foo
{
    T member;
};

template <typename T>
void test()
{
    auto  a = (Foo<T>*)malloc(sizeof(Foo<T>));
    auto *b = (Foo<T>*)malloc(sizeof(Foo<T>));

    static_assert(std::is_same<decltype(a), decltype(b)>::value, "same type");
}

template void test<int>();   // explicit instantiation

编译时不会出现静态断言失败。

这是否意味着对于a, auto is Foo<T>*, 但对于b, auto is Foo<T>?

Yes.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

例如,C++0x auto 关键字的含义是什么? 的相关文章

随机推荐