Мне нужно определить несколько константных строк, которые будут использоваться во всем проекте C++20.
Я рассматриваю следующие варианты:
Код: Выделить всё
constexpr char[] str1 = "foo";
constexpr std::string str2 = "foo";
constexpr std::string_view str3 = "foo";
но я сомневаюсь, какой из них выбрать.
эффективен, но не является современным C++.
— это современный C++, и он использует тот факт, что «поскольку C++20 std::string является классом constexpr для выполнения операций во время компиляции», но даже в этом случае я слышал, что он все равно использует динамическое выделение, поэтому это может быть не лучший вариант.
, вероятно, является оптимальным выбором, но я проверил несколько ресурсов, включая Professional C++ (5th Edition) Марка Грегуара, и не нашел четких указаний, что это рекомендуемый способ определения глобальных константных строк. Я только что прочитал, что лучше всего передать в функцию строку, доступную только для чтения (по сравнению с передачей const std::string& или const char*).
Итак, какой метод подходит для C++20?
Подробнее здесь:
https://stackoverflow.com/questions/798 ... ing-in-c20