Каков оптимальный способ определения глобальной константной строки в C++20?C++

Программы на C++. Форум разработчиков
Anonymous
Каков оптимальный способ определения глобальной константной строки в C++20?

Сообщение Anonymous »

Мне нужно определить несколько константных строк, которые будут использоваться во всем проекте C++20.
Я рассматриваю следующие варианты:

Код: Выделить всё

constexpr char[] str1 = "foo";
constexpr std::string str2 = "foo";
constexpr std::string_view str3 = "foo";
но я сомневаюсь, какой из них выбрать.

Код: Выделить всё

constexpr char[]
эффективен, но не является современным C++.

Код: Выделить всё

constexpr std::string
— это современный C++, и он использует тот факт, что «поскольку C++20 std::string является классом constexpr для выполнения операций во время компиляции», но даже в этом случае я слышал, что он все равно использует динамическое выделение, поэтому это может быть не лучший вариант.

Код: Выделить всё

constexpr std::string_view
, вероятно, является оптимальным выбором, но я проверил несколько ресурсов, включая Professional C++ (5th Edition) Марка Грегуара, и не нашел четких указаний, что это рекомендуемый способ определения глобальных константных строк. Я только что прочитал, что лучше всего передать в функцию строку, доступную только для чтения (по сравнению с передачей const std::string& или const char*).
Итак, какой метод подходит для C++20?

Подробнее здесь: https://stackoverflow.com/questions/798 ... ing-in-c20

Вернуться в «C++»