Кресты / Говнокод #1375 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
class Par_host_port
{
private:
        std::string vdata;
public:
//...
        char* get () { return (char*)vdata.c_str (); }
};

char const* превращается... Превращается char const*... В char*!

Запостил: guest guest, (Updated )

Комментарии (7) RSS

  • Комментарий не понял. ПРикол-то не в том, что конст чар превращается в чар, а в том, что так вообще нельзя использовать c_str()
    Ответить
  • это же не просто каст. это каст особой, грязной магии.
    Ответить
  • Я тоже кое-чего не понял. Для убирания константы надо делать const_cast. Код же не будет компилиться?

    А вообще можно (но лучше не надо) делать так:

    vdata.c_str();
    return &vdata[0];

    🙂
    Ответить
  • [quote=Говногость]Для убирания константы надо делать const_cast. Код же не будет компилиться?[/quote]

    c-style cast делает не только static_cast, но и const_cast и reinterpret_cast, иногда - два из этих.
    Ответить
  • [quote=Говногость]return &vdata[0];[/quote]

    А кстати. если я ничего не путаю, в новом стандарте это будет вполне легальным и рабочим, безо всяких предварительных c_str. в отличии от каста, снимающего константонсть, который останется вне закона.
    Ну кроме случая с пустой строкой.
    Ответить
  • А вообще можно (но лучше не надо) делать так:

    vdata.c_str();
    return &vdata[0];

    для строк это в общем случае неверно. а вот vdata.data() - другое дело.
    Ответить
    • vdata.data() может вернуть неnull-terminated string, как и &vdata[0]. Других проблем не вижу. Для какого общего случая неверно-то?
      Ответить

Добавить комментарий

Семь раз отмерь — один отрежь, guest!

    А не использовать ли нам bbcode?


    8