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

Операторы неявного преобразования строки в const char * / wchar_t *

Я считаю, что класс MFC / ATL CString очень удобен в коде Win32 C ++; в частности, мне показалось удобным тот факт, что мы можем передавать экземпляры CString в параметры LPCWSTR (т.е. const wchar_t *) Win32 API напрямую, благодаря оператору неявного преобразования, определенному CString.

Вместо этого при использовании std::wstring требуется явный вызов метода .c_str().

Итак, почему строковые классы STL (как std::string, так и std::wstring) требуют явного вызова метода (c_str()) вместо определения неявного оператора преобразования _11 _ / _ 12_?

Есть ли серьезные подводные камни, скрытые с помощью операторов неявного преобразования?

18.01.2012

  • Как насчет нежелательного преобразования в bool? Более прагматично, если вы пишете стандартный C ++, у вас не должно быть этих голых указателей, поэтому, возможно, не было необходимости обеспечивать такое удобство исключительно для внешних интерфейсов. 18.01.2012
  • std::string уже можно построить из char const*. Было бы… ужасно, если бы первое затем неявно конвертировалось обратно во второе. Я не могу объяснить почему; это просто было бы. 18.01.2012
  • @KerrekSB: Может быть, еще одна нежелательная вещь: CString s; ...; удалить s; // БУМ. 18.01.2012
  • Ответы на подобные вопросы даются в книге Страуструпа «Дизайн и эволюция C ++». Это старая книга, но ответы на многие вопросы почему? вопросы о C ++. 18.01.2012
  • Mr_C64: Совершенно уверен, что это не будет считаться, но даже тогда я бы не стал рассматривать это как вескую причину, поскольку вы могли бы просто использовать & и добиться того же. 18.01.2012
  • @Mario: для меня это не имеет особого смысла ... Вы можете использовать & с каждым экземпляром класса, дело не в этом. Проблема в том, что неявное преобразование указателя может остановить компилятор, который вместо этого выдаст ошибку, если встретит X x; удалить x ;. 18.01.2012
  • Хорошо, как если бы вы скрыли ошибку кодирования, иначе вы бы заметили это (а не то, что вы делаете специально). 18.01.2012
  • Мой предыдущий комментарий опечатка: выключение должно быть заткнуто. Прости. 18.01.2012
  • @Mario: но лучше, когда ошибки возникают во время компиляции, чем во время выполнения :) 18.01.2012
  • возможный дубликат почему std :: string не обеспечивает неявное преобразование в char *? 19.01.2012

Ответы:


1

Какими бы ни были теоретические опасения, отмечу только, что за годы работы с CString меня ни разу не укусила эта функция. Удобство намного перевешивает опасности.

18.01.2012
  • я тоже :) Мне было любопытно, поэтому я и спросил здесь. 18.01.2012
  • @ Mr_C64, я очень удивлен, что на этот вопрос еще нет прямого ответа на вопрос. Я разместил это, чтобы представить противоположную точку зрения, я не ожидал, что это будет единственная точка зрения. 18.01.2012
  • Новые материалы

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

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

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

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

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

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

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