首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Visual中的std::initializer_list歧义

Visual中的std::initializer_list歧义
EN

Stack Overflow用户
提问于 2015-11-19 15:31:19
回答 1查看 335关注 0票数 6

我正在尝试将std::initializer_list接受到泛型构造函数中,如下所示:

代码语言:javascript
复制
template<typename T>
class Test{
  std::vector<T> V;

  Test(std::initializer_list<T>& list) : V(list){}

};

使用

代码语言:javascript
复制
Test<int> test{ 1, 2, 3, 4 };

但我知道错误是:

代码语言:javascript
复制
error C2440: 'initializing' : cannot convert from 'initializer-list' to 'Test<int>' No constructor could take the source type, or constructor overload resolution was ambiguous

我只是不知道我做错了什么。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-19 15:36:20

代码语言:javascript
复制
Test(std::initializer_list<T>& list) : V(list){}

这将通过非const引用获取std::initializer_list,但随后尝试将一个临时引用绑定到它,这是非法的。

std::initializer_list设计为轻量级,因此您只需按值传递它:

代码语言:javascript
复制
Test(std::initializer_list<T> list) : V(list){}
//                           ^ no &
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33808064

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档