C++11 为c样式字符串创建std::initializer\u列表构造函数

C++11 为c样式字符串创建std::initializer\u列表构造函数,c++11,c-strings,initializer-list,C++11,C Strings,Initializer List,我正在为大学创建一个图形程序,并为图形创建了一个std::initializer\u list构造函数,如下所示: Graph(std::initializer_list< std::string >& _vertices_){ // ... initialising my map of vertices with their names } 图形(std::initializer\u列表&\u顶点){ //…使用顶点的名称初始化顶点贴图 } 但是,当我尝试在主程

我正在为大学创建一个图形程序,并为图形创建了一个
std::initializer\u list
构造函数,如下所示:

Graph(std::initializer_list< std::string >& _vertices_){
    // ... initialising my map of vertices with their names
}
图形(std::initializer\u列表&\u顶点){
//…使用顶点的名称初始化顶点贴图
}
但是,当我尝试在主程序中初始化图形时:

int main(){
    Graph g = { "A", "B", "C", "D", "F", "G" };        //Error: Does not compile
    g.connectEdge( "A", "B" ).setWeight( 2 );
    // ... connecting other edges
    g.set_path_algorithm( Graph::DJIKSTRA );
    int cost = g.find_shortest< Graph::COST >("A", "G");
    //int hops = g.find_shortest< Graph::HOPS >("A", "G");
    std::cout << "The shortest path between A and G is: " << cost ;
    return 0;
}
intmain(){
图g={“A”、“B”、“C”、“D”、“F”、“g”};//错误:未编译
g、 连接边缘(“A”、“B”)。设定重量(2);
//…连接其他边缘
g、 集合路径算法(图::DJIKSTRA);
int cost=g.find_shortest(“A”,“g”);
//int hops=g.find_shortest(“A”,“g”);
std::cout

创建初始值设定项列表对象。它是临时实例。临时对象不能绑定到左值引用

解决方案:

[1] 作常数参考

Graph(const std::initializer_list< std::string >& _vertices_)
Graph(std::initializer_list< std::string > _vertices_)
图形(常量std::初始值设定项列表和顶点)
[2] 只需丢弃引用即可

Graph(const std::initializer_list< std::string >& _vertices_)
Graph(std::initializer_list< std::string > _vertices_)
图形(std::initializer\u列表\u顶点)
初始值设定项列表是轻量级对象(可以被视为pair:pointer-to-data+length),因此复制它并不昂贵。

{ "A", "B", "C", "D", "F", "G" }
创建初始值设定项列表对象。它是临时实例。临时对象不能绑定到左值引用

解决方案:

[1] 作常数参考

Graph(const std::initializer_list< std::string >& _vertices_)
Graph(std::initializer_list< std::string > _vertices_)
图形(常量std::初始值设定项列表和顶点)
[2] 只需丢弃引用即可

Graph(const std::initializer_list< std::string >& _vertices_)
Graph(std::initializer_list< std::string > _vertices_)
图形(std::initializer\u列表\u顶点)

初始值设定项列表是轻量级对象(可以视为对:指向数据的指针+长度),所以复制并不昂贵。

我是否应该更改标题以反映我面临的实际问题?我认为没有必要。对我来说,标题可以保持现状。我是否应该更改标题以反映我面临的实际问题?我认为没有必要。对我来说,标题可以保持现状。