Разве gsl :: cstring_span не поддерживает constexpr? Если нет, зачем мне его использовать?

У меня есть кусок кода, который выглядит следующим образом:

constexpr gsl::cstring_span<> const somestring{"Hello, I am a string"};

и он отказывается компилировать сообщение с жалобой на то, что где-то вызывается какая-то функция non-constexpr.

Почему это? Это кажется наиболее важным вариантом поддержки для поддержки. Весь смысл в том, чтобы иметь возможность проверять границы во время компиляции, если это вообще возможно. Компиляция проверки временных границ с использованием константных строковых литералов кажется наиболее подходящей для этого. Но это не может произойти, если это не может быть объявлено constexpr, Что тут происходит?

2

Решение

Я думаю, что проблема заключается в том, что строковые литералы имеют массив типов const char и заканчиваются нулем. Но кто скажет, что вы строите свой cstring_span из массива с нулевым символом в конце?

Из-за этого конструктор cstring_span выполняет физическую проверку, чтобы удалить нулевой терминатор, если он существует, в противном случае принять всю длину массива.

Я не уверен, насколько мощным constexpr выражения могут быть но это может можно было бы реализовать это в constexpr путь. Вы можете создать вопрос, спрашивая об этом здесь:

https://github.com/Microsoft/GSL/issues

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]