Сделайте 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;
}();
Или просто рефакторинг логики инициализации в другую функцию.