Что такое zstring в C++ и где его взять?

118
07 мая 2021, 11:40

В одном из разделов Cpp core guidlines говорится о загадочных строковых типах zstring и czstring и преимуществах их использования перед классическими char *. Не смог найти ничего подобного в C++. Подскажите, как подключить и использовать эти типы в своих программах?

P.S. Я знаю, что для хранения строк ещё лучше подойдёт std::string. Интересуюсь только лишь из любопытства, а не с целью практического использования.

Answer 1

Это типы из библиотеки Guidelines Support Library (есть реализация от Microsoft). Использовать GSL в этой реализации достаточно просто — вся библиотека находится в заголовочных файлах, так что линковать ее не нужно. Достаточно просто скачать из репозитория директорию include/gsl/ и скопировать в папку со своим проектом. Затем прописать путь к заголовочным файлам в настройках компилятора. Для GCC и Clang, например, это будет выглядеть так:

clang -I"include/" ...

Документации я не нашел (может, плохо искал), поэтому о типах можно узнать прямо из заголовочных файлов (нас интересует string_span.h):

//
// czstring and wzstring
//
// These are "tag" typedefs for C-style strings (i.e. null-terminated character arrays)
// that allow static analysis to help find bugs.
//
// There are no additional features/semantics that we can find a way to add inside the
// type system for these types that will not either incur significant runtime costs or
// (sometimes needlessly) break existing programs when introduced.
//
template <typename CharT, std::ptrdiff_t Extent = dynamic_extent>
using basic_zstring = CharT*;
template <std::ptrdiff_t Extent = dynamic_extent>
using czstring = basic_zstring<const char, Extent>;
...
template <std::ptrdiff_t Extent = dynamic_extent>
using zstring = basic_zstring<char, Extent>;

Используем примерно так:

#include <iostream>
#include <gsl/gsl>
int main()
{
    gsl::czstring<> s = "hello, world!\n";
    std::cout << s;
}
READ ALSO
Нужна помощь по скрипту интсаллера

Нужна помощь по скрипту интсаллера

Пишу кроссплатформенное приложениеЗапнулся на сборке инсталлера(использую QtIFW 3

135
Объясните пожалуйста код с проверкой условия имеющий следующию конструкцию

Объясните пожалуйста код с проверкой условия имеющий следующию конструкцию

У меня есть следующий код в теле функции идет следующее условие:

102
Записать данные в файл в два столбца

Записать данные в файл в два столбца

Хочу записать данные в файл, но не знаю как сделать так, чтобы записывалось в два столбикаПомогите разобраться

117
Как задать количество знаков после запятой для конкретной переменной c++

Как задать количество знаков после запятой для конкретной переменной c++

Имеется три переменные типа doubleНужно для первой переменной t сделать 1 знак после запятой, а для двух оставшихся x и y сделать 3 знака после...

99