我可以在声明定义中避免类型冗余吗?

时间:2012-06-13 12:53:07

标签: c++ types

有没有办法避免在这些行上写std::vector<int>两次?

std::vector<int>* numbers = new std::vector<int>(7);

(Typedef不计算。)

2 个答案:

答案 0 :(得分:5)

是。仅在C ++ 11中:

auto numbers = new std::vector<int>(7); //C++11 only

此处numbers类型由编译器推断,结果是std::vector<int>*,这是您在代码中编写的内容。< / p>

但是等等。为什么首先使用new

你有什么强有力的理由吗?很可能不是。改为使用自动对象:

std::vector<int> numbers; //no new

答案 1 :(得分:4)

0)首先不要使用new

std::vector<int> numbers(7);

1)使用typedef

typedef std::vector<int> ints;
ints* numbers = new ints(7);

2)在C ++ 11中使用auto

auto numbers = new std::vector<int>(7);

3)如果你坚持使用指针,请使用智能指针:

std::unique_ptr<std::vector<int>> numbers(new std::vector<int>(7));

4)使用制造商功能:

typedef std::vector<int> ints;
std::unique_ptr<ints>&& make_ints()
{
    return std::unique_ptr<ints>(new ints(7));
}

int main()
{
    std::unique_ptr<ints> numbers = make_ints();
}