C++ std::initializer\u返回成员变量的列表返回不正确的值
使用C++ std::initializer\u返回成员变量的列表返回不正确的值,c++,c++11,initializer-list,C++,C++11,Initializer List,使用std::initializer\u list从函数返回多个值是否存在任何问题。在下面的代码中,当我试图打印使用std::initializer\u list返回的值时,我得到了垃圾值 头文件 #ifndef _C17_CONSTRUCT_3_HPP #define _C17_CONSTRUCT_3_HPP #include <iostream> #include <string> #include <initializer_list> class A
std::initializer\u list
从函数返回多个值是否存在任何问题。在下面的代码中,当我试图打印使用std::initializer\u list
返回的值时,我得到了垃圾值
头文件
#ifndef _C17_CONSTRUCT_3_HPP
#define _C17_CONSTRUCT_3_HPP
#include <iostream>
#include <string>
#include <initializer_list>
class A {
public:
A(int a,int b):a{a},b{b}{}
std::initializer_list<int> return_init_list()
{
std::initializer_list<int> local_list = {a, b};
std::cout<<"a "<<a<<" b "<<b<<std::endl;
return local_list;
}
private:
int a{9};
int b{10};
};
#endif
std::initializer\u list
不是容器,不能使用它从函数返回项目列表。当你写下面的
std::initializer_list<int> local_list = {a, b};
const int __temp_array[2] = {a, b};
std::initializer_list<int> local_list{__temp_array, __temp_array + 2};
// the above line assumes the implementation has access to such a constructor
std::初始值设定项\u list local\u list={a,b};
编译器将其转换为功能类似于以下的代码
std::initializer_list<int> local_list = {a, b};
const int __temp_array[2] = {a, b};
std::initializer_list<int> local_list{__temp_array, __temp_array + 2};
// the above line assumes the implementation has access to such a constructor
const int_uutemp_数组[2]={a,b};
std::初始值设定项\u list local\u list{{uuuuuu temp\u数组,\uuuuu temp\u数组+2};
//上行假设实现可以访问这样的构造函数
标准-§8.5.4/5[dcl.初始列表]中有一个几乎相同的示例
在代码中,当函数
return\u init\u list()
返回时,包含a
和b
副本的临时数组将不再存在。使用std::pair
或std::tuple
返回值。std::initializer\u list
不是容器,不能使用它从函数返回项目列表。当你写下面的
std::initializer_list<int> local_list = {a, b};
const int __temp_array[2] = {a, b};
std::initializer_list<int> local_list{__temp_array, __temp_array + 2};
// the above line assumes the implementation has access to such a constructor
std::初始值设定项\u list local\u list={a,b};
编译器将其转换为功能类似于以下的代码
std::initializer_list<int> local_list = {a, b};
const int __temp_array[2] = {a, b};
std::initializer_list<int> local_list{__temp_array, __temp_array + 2};
// the above line assumes the implementation has access to such a constructor
const int_uutemp_数组[2]={a,b};
std::初始值设定项\u list local\u list{{uuuuuu temp\u数组,\uuuuu temp\u数组+2};
//上行假设实现可以访问这样的构造函数
标准-§8.5.4/5[dcl.初始列表]中有一个几乎相同的示例
在代码中,当函数
return\u init\u list()
返回时,包含a
和b
副本的临时数组将不再存在。使用std::pair
或std::tuple
返回值。您是否需要在此处使用std::Initializer\u列表?您的程序实际上对我来说运行得很好。\u C17\u CONSTRUCT\u 3\u HPP
已保留。@Cruiser不是必需的。我只是在检查std::initializer\u list的用法。您使用的编译器和版本是什么?矿山G+(Ubuntu 4.84-2Ubuntu1~14.04)4.84.版权(C)2013免费软件基金会,你有没有要求使用STD::IndieCurryListLIST?您的程序实际上对我来说运行得很好。\u C17\u CONSTRUCT\u 3\u HPP
已保留。@Cruiser不是必需的。我只是在检查std::initializer\u list的用法。您使用的编译器和版本是什么?矿山G+(Ubuntu 4.84-2Ubuntu1~14.04)4.84.版权(C)2013免费软件基金会,Inc.array@uknowit它是\uuuu temp\u array
,最终修复了所有的错误:)它是&a还是&temp_array@uknowit它是\uuuu temp\u array
,最终修复了所有的错误:)