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(使用前将#替换为@)