Nano Hash - криптовалюты, майнинг, программирование

Могу ли я построить string_view из nullptr?

Я только что обнаружил, что xcode/clang не позволяет создавать std::string_view из char* nullptr. Я ожидаю, что это установит size() в 0 и вернет null для data(), и именно так это реализовано в gcc 7.2 на моем компьютере с Ubuntu Linux.

Я проверил http://en.cppreference.com/, но не смог найти ни одного комментария по этому поводу, так что стандарт говорит?

11.11.2017

Ответы:


1

Ну да и нет. Вы не можете передать нулевой указатель конструкторам std::string_view, потому что это нарушит их предварительные условия; см. конструктор 2 и 3 в [string.view.cons].

Но конструктор по умолчанию std::string_view устанавливает размер равным нулю и null для своих данных, поэтому вместо этого вам придется использовать этот конструктор или использовать этот обходной путь/трюк:

std::string_view().swap(your_string);
11.11.2017
  • Вы указываете на [str, str + traits​::​length(str)) — допустимый диапазон. но это не поможет здесь. [nullptr,0] наверняка является допустимым диапазоном. Так что все зависит от стандартного определения traits::length, где я могу это найти? 11.11.2017
  • @Lothar Возможно, вы знаете, что std::string_view - это просто псевдоним std::basic_string_view<char, std::char_traits<char>>. Этот второй параметр — черты. Кажется, не сказано, что должно произойти, если i выходит за пределы диапазона, поэтому я просто предполагаю, что это недопустимо здесь 11.11.2017
  • Существует предложение разрешить nullptr в качестве единого аргумента конструктора для basic_string_view и basic_string. 10.08.2018
  • @MatthäusBrandl Jup, но комитет не смог прийти к единому мнению по этому поводу. Я думаю, что он появится снова на следующем, но я не уверен. 10.08.2018
  • Вы можете просто сделать your_string_view = {}; вместо своп-трюка. 18.11.2020
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..