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

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
// File.cpp
QString File::size() const
{
    return QString::number(QFileInfo(m_path).size());
}

// ... somewhere in the code...

File* message = ...
...
if (message->size() == "0")
        return;

Commit b1aef142 "Refactoring"
Р - Рефакторинг

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

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

  • Ну, разве что если это какой-нибудь промежуточный класс для отображения в интерфейсе, сделанном на Quick/QML. На случай, если нужно будет добавить значения типа "<unknown>".
    Но сравнение все равно подозрительное.

    P.S. quick ui quick!
    Ответить
    • Нет, это файл модели, в которой хранятся все данные. UI тут пока и не пахнет 🙂 Отображать размер на UI тоже не планируется
      Ответить
    • Кстати, а для класса QString сравнение перегружено или будут сравниваться указатели?
      Ответить
      • Конечно, перегружено, и сравнивает содержимое строк.
        А вот если оператор сравнения в структуре не перегрузить, то
        ...
        черт.
        Забыл. То ли будет пополевое сравнение, то ли сравнение будет не определено. Скорее, второе. Но точно не сравнение адресов.
        Ответить
        • Поругается на отсутствие перегруженного оператора, ЕМНИП.
          Ответить
        • Будет тоже самое, что и с классом - ошибка компиляции. Все отличие class от struct в том, что модификаторы доступа дефолтные разные: private у class и public у struct, больше ничего
          Ответить
          • Это понятно, просто я забыл, генерируется ли оператор== по умолчанию. Ну и мало ли в новом стандарте как-нибудь по-другому.
            Ответить
            • Меня и си нахуй послало

              foo.c:4:13: error: invalid operands to binary == (have ‘struct a’ and ‘struct a’)

              и плюсы
              foo.c:4:13: error: no match for ‘operator==’ (operand types are ‘a’ and ‘a’)


              А в коко есть датаклассы, и в C# структуры есть тоже.
              Выходит что в C++ эту питушню надо руками генерировать?
              Ответить
            • Ага, они тут оператор <=> (three-way comparison) введут в C++20 (это не шутка!), который можно будет сгенерировать (и одновременно все оставшиеся 6 операторов сравнения: >, <, >=, <=, ==, !=)


              https://en.cppreference.com/w/cpp/language/operator_comparison#Three-way_comparison
              https://en.cppreference.com/w/cpp/language/default_comparisons


              А я еще когда-то угорал с JS и его === 🙁
              Ответить
              • это чтоль летающая тарелка для сравнения как в перле?

                а можно его так переопределить чтобы

                a> b == true
                a < b == false
                (a <=> b) == 0
                Ответить
                • Тип того, но тут не -1, 0, 1 будет возвращать, а один из 5 ordering типов (по второй ссылке, что скинул выше, есть примеры). Но я пока боюсь это трогать 🙂
                  Ответить
              • auto operator<=>(const Point&) const = default;

                Вот так и думал, что в новом стандарте что-то такое введут.
                Ответить
        • Ты перепутал с C#:там структура это value type и будет попо-левое сравнение

          В C++ struct это синоним класса просто там всё public.
          Ответить
  • а поясните для питухов, как скомпилируется возвращение нумбера, когда в сигнатуре стринг?
    Ответить
    • QString File::size() const
      {
        return 123;
      }
      Это не скомпилируется, поскольку в QString нет неявного конструктора/преобразования из int.
      А QString::number(int) возвращает QString.
      Ответить
      • >А QString::number(int) возвращает QString.
        я этого не знал)

        а что такое преобразователь? Я только знаю про коструктор, типа
        class Foo {
        	public:
        		Foo(int i){}
        		
        };
        
        int main() {
        	Foo f = 1; //C++ странны язык
        }
        Ответить
        • Преобразование типов
          class Foo {
          	public:
          		operator int() { return 42; }
          };
          int main() {
          	Foo f = 1;
          	int i = (int)f; // 42
          	int j = f; // 42 (неявное преобразование)
          }
          Ответить
          • Почему вы написали одинаковый код? Вы что, один и тот же человек?
            Ответить
        • class Foo {
          public:
               operator int() const { return m_value; }
          private:
               int m_value { 42 };
          };
          
          int main() {
              Foo obj;
              int res = 1 + obj; // res == 43
              return 1;
          }
          Ответить
    • Ты ведь веб-макака, должна понимать. Если от строки отнять число - будет число.
      Ответить
      • Для начала, вебмакака вообще не должна понимать разницы между числом и строкой.
        Вся эта типизация это для всяких сей и прочих языков для калкуляторов.

        Современные программисты должны делать сайты, и думать о пользователе, а не о числах
        Ответить
      • Неа, мне до тудава 20 часов на мамолете с 2-мя пересадками за 17 тыр. И это только в одну сторону.

        Да и я малость ебнуты и не способне к общению IRL.
        Ответить

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

Где здесь C++, guest?!

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


    8