当前位置:  开发笔记 > 编程语言 > 正文

是否允许矢量<auto>?(错误:无效使用'auto')

如何解决《是否允许矢量<auto>?(错误:无效使用'auto')》经验,为你挑选了2个好方法。

我有:

#include 
#include 

using namespace std;

int main()
{
   auto a = -SOME_CONST_MAX;
   vector myVec {a, a, a, a};
}

我不知道它的类型,SOME_CONST_MAX但我想制作一个类型的矢量-SOME_CONST_MAX.我认为vector它会起作用,因为它会从类型中推断出来a.

我正在运行这些错误: g++ -std=c++14 main.cpp

main.cpp:9:9: error: invalid use of ‘auto’
  vector myVec {a, a, a, a};
         ^
main.cpp:9:13: error: template argument 1 is invalid
  vector myVec {a, a, a, a};
             ^
main.cpp:9:13: error: template argument 2 is invalid
main.cpp:9:32: error: scalar object ‘myVec’ requires one element in initializer
  vector myVec {a, a, a, a};
                                ^

vector不允许的?我究竟做错了什么?



1> max66..:

我发现Slava的解决方案非常简单和优雅

vector myVec {a, a, a, a};

但是,只是为了显示另一种方式,使用可变参数模板函数

template 
std::vector getVect (T const & t, Ts const & ... ts)
 { return { t, ts... } ; }

你可以variadic再次使用

auto myVec = getVect(a, a, a, a, a);



2> Yakk - Adam ..:

如果我没记错的话,已经提出了vector语法建议.它们不被C++标准委员会接受.

C++ 17将会介绍类似的东西std::vector bob = {a,a,a,a};.注意缺乏.这可能只是语言功能,std后来实际使用.

auto也被添加到模板,但是auto总是一个值从来就不是一个类型.因此,使用auto替换类型被认为是一个坏主意.

以下是auto模板中的用法:

template
using constant_t=std::integral_constant;
template
constexpr constant_t constant{};

现在constant<7>是一个std::integral_constant.由于许多原因,这被认为是有用的.

使用当前C++解决实际问题的答案是:

auto a = -SOME_CONST_MAX;
std::vector myVec {a, a, a, a};

我们推断出它的类型a并将其传递给vector.

推荐阅读
殉情放开那只小兔子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有