2016-07-21 5 views
0

Предположим, что у меня есть класс, как это:Лучший способ для хранения и построения элемента массива константный или строки

class foo { 
    const A arr; 
    foo(B arg): arr(arg) { } 
}; 

Что является наиболее эффективным выбором для типов A и B. Я что-то подобное мышление,

class foo { 
    const std::initializer_list<std::string> arr; 
    foo(std::initializer_list<std::string> arg): arr(arg) { } 
}; 

Но я думаю, что это будет копировать-строить строки в arr. Я хотел бы быть в состоянии сделать это:

std::string str1("there"), str2("now"); 
foo bar({"hello",str1,std::move(str2)}); 

и имеют RValue строки в скобках переехал в arr.

Должен ли я использовать std::initializer_list, или std::vector, или что-то еще?

+0

Не используйте 'initializer_list' как член. 'initializer_list' является ** не ** контейнером, он не управляет хранилищем, он относится только к внешнему выделенному массиву. Это для _инициализации вещей, а не для хранения вещей. Это ключ от имени. –

ответ

1

Определить arr как std::vector<std::string>, а аргумент ctor как std::initializer_list<std::string>, в основном то, что вы догадались.

+0

Будет ли перенесен вариант 'str2' в моем примере использования с этой реализацией? – SU3