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
,最终修复了所有的错误:)