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

rai*_*ndi 3 c++ gcc c++11

auto a = (Foo<T>*)malloc(sizeof(Foo<T>));
auto *b = (Foo<T>*)malloc(sizeof(Foo<T>));
Run Code Online (Sandbox Code Playgroud)

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

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

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

fre*_*low 12

是a和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
Run Code Online (Sandbox Code Playgroud)

这样编译时没有静态断言失败.

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

是.