Как я мог назначить строку C ++ другой по ее ссылке - PullRequest
0 голосов
/ 20 октября 2018

У меня есть две строки c ++ std::string dir_1("./dir1"); std::string dir_2("./dir2");, которые мне нужно назначить для другой строки в соответствии с некоторыми условиями: if (...) str = dir_1; else str = dir_2;.

Однако при выполнении этих операций будет скопировано содержимое dir_1 и dir_2, что приведет к дополнительным расходам.Как я мог уменьшить эти накладные расходы?Возможно ли, что я реализую назначение только через их ссылки?

1 Ответ

0 голосов
/ 20 октября 2018

Сделайте str ссылкой и используйте троичный оператор для его инициализации:

const std::string& str = condition ? dir_1 : dir_2;

Это не потребует и копирования или перемещения исходных строк.


Если условие более сложное, вы можете использовать IIFE (выражение функции, вызываемого немедленно):

const std::string& str = []() -> auto&
{
    if(condition) return dir_1;
    else return dir_2;
}();

Или просто рефакторинг логики инициализации в другую функцию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...