Все сервисы Хабра

Сообщество IT-специалистов

Ответы на любые вопросы об IT

Профессиональное развитие в IT

Удаленная работа для IT-специалистов

Войти на сайт
  • Все вопросы
  • Все теги
  • Пользователи

Хабр Q&A — вопросы и ответы для IT-специалистов

Получайте ответы на вопросы по любой теме из области IT от специалистов в этой теме.

Узнать больше
другие проекты хабра
  • Хабр
  • Карьера
  • Фриланс
Задать вопрос
Anton3

Антон Жилин

  • 163
    вклад
  • 1
    вопрос
  • 143
    ответа
  • 57%
    решений
Лайки
  • Информация
  • Ответы
  • Вопросы
  • Комментарии
  • Подписки
  • Нравится
  • Достижения
  • Как правильнее будет использовать оператор if?

    res2001 @res2001
    Developer, ex-admin
    Всегда, когда это возможно, использую второй вариант - это позволяет избежать лишних фигурных скобок, а как следствие лишней вложенности, отступов и т.п., код становится более читабельный и простой.
    Но, конечно, в этом случае, в теле if должна быть передача управления куда-то (на обработчик ошибок, return и т.п.).
    Часто делаю такую конструкцию:
    do {
    ...
    if(result == error) break;
    ...
    } while(0);
    if(result == error) {
    обработка ошибок
    }

    В этом случае обработка ошибок находится в одном месте. Кроме того do..while(0) позволяет не использовать goto - вместо него используется break. Часто видел подобную схему в около системных сервисах и утилитах, но с использованием goto. У меня аллергия на goto, поэтому предпочитаю заворачивать в do..while(0).
    Ответ написан более двух лет назад
    Комментировать
    Комментировать
  • Как правильнее будет использовать оператор if?

    galaxy @galaxy
    Зависит от содержания success/not_success.
    Если внутри not_success, например, нет оператора выхода (return, throw, хоть goto), то во втором случае выполнится сначала not_success, а потом success.
    Ответ написан более двух лет назад
    3 комментария
    3 комментария
  • Есть ли нативный способ написать GUI на html/css для С++ программ?

    HemulGM
    Hemul GM @HemulGM
    Delphi Developer, сис. админ
    Хватит ерундой заниматься и используйте нормальные инструменты для GUI конкретного языка.

    Qt -тяжелая для одного виджета? А браузер для одного виджета не тяжелый?

    Пиши на шарпе или делфи тогда. Там с GUI куда лучше и легче.

    P.S. qt позволяет использовать css для настройки контролов.
    Ответ написан более двух лет назад
    17 комментариев
    17 комментариев
  • Как получить битовое представление типа double в C++?

    gbg
    Армянское Радио @gbg Куратор тега C++
    Любые ответы на любые вопросы
    Идея в том, что в double 64 бита. Так что если мы воспользуемся type punning и наложим сверху дабла uint64_t, в котором тоже 64 бита, мы получим 64 битное целое число, содержащее в себе биты исходного дабла.

    *reinterpret_cast(&a)

    Далее, мы используем стандартный трюк с std::bitset для перевода числа в строку, содержащую его двоичное представление

    И потом пара полезных фактов:
    - мы выводим число и его же, но со знаком минус. Можно видеть, что знак хранится в первом бите.
    - аналогично, можем посмотреть, в каких битах хранится экспонента, посмотрев на a, 2*a, 4*a
    #include <iostream>
    #include <bitset>
    using namespace std;
    
    void printBits(const double a)
    {
    	cout << bitset<64>(*reinterpret_cast<const uint64_t*>(&a)) << endl;
    }
    
    int main() 
    {
        const double a = 3.14;
        printBits(a);
        printBits(-a);
        printBits(a*2);
        printBits(a*4);
        return 0;
    }
    0100000000001001000111101011100001010001111010111000010100011111
    1100000000001001000111101011100001010001111010111000010100011111
    0100000000011001000111101011100001010001111010111000010100011111
    0100000000101001000111101011100001010001111010111000010100011111

    Ideone
    Ответ написан более двух лет назад
    1 комментарий
    1 комментарий
  • А как сделать чтобы я вводил 2 слова и первое считало сколько букв а второе слово выводило в столбик?

    YuriyVorobyov1333
    Yuriy Vorobyov @YuriyVorobyov1333
    Software Developer (Java/Node.js/Angular)
    Вот:
    #include <iostream>
    #include <string>
    
    using namespace std;
    
    int main()
    {
      string str;
    
      cin >> str;
    
      for (char& c : str) {
        cout << c << endl;
      }
    
      cout << "count: "<< str.length() << endl;
    }
    Ответ написан более двух лет назад
    6 комментариев
    6 комментариев
  • Из-за чего возникает ошибка Segmentation fault (core dumped)?

    jcmvbkbc
    jcmvbkbc @jcmvbkbc
    http://dilbert.com/strip/1998-08-24
    выдает ошибку Segmentation fault (core dumped).
    В чем причина данной ошибки?

    class Car
        {
             ...
    private:
             std::string Availability;
             std::string brand;
             int carAge;
        };
    ...
    Car machine;
    while (fin.read((char*)&machine, sizeof(Car)))

    В том, что нельзя сложные объекты так записывать в файл и читать из файла. Так можно обращаться с объектами содержащими свои данные в непрерывном участке памяти. std::string к таким классам объектов не относится.
    Ответ написан более двух лет назад
    8 комментариев
    8 комментариев
  • Диапазон типов данных C++?

    Евгений Шатунов @MarkusD Куратор тега C++
    все время мелю чепуху :)
    Хочу порекомендовать тебе материал от разработчиков PVS-Studio относительно моделей данных в C++. Там хорошо и коротко объясняется суть твоего вопроса.
    Так же тебе будет полезно изучить документацию C++, где можно изучить подробности.

    Модель данных выбирается при трансляции и не может быть изменена в уже собранном бинарном коде. Абсолютно весь бинарный код опирается на значения модели данных буквально в каждый момент времени исполнения. Изменение модели данных бинарного кода потребует детального анализа как исполняемого кода, так и всех структур памяти, которыми бинарный код оперирует. Это будет эквивалентно повторной трансляции исходного кода в бинарный с иной моделью данных.

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

    Поэтому, в общем смысле на твой вопрос ответить можно так. Если клиентская система ожидает от процесса одну модель данных, а он работает в другой, то падения процесса не миновать. В ряде случаев процесс даже не загрузится в память, т.к. загрузчик бинарного кода может по косвенным признакам определить несовместимость процесса и системы у клиента.
    Ответ написан более двух лет назад
    Комментировать
    Комментировать
  • Как создать файл в C++ не открывая его?

    6db
    6db @6db
    #include <fstream>
    
    ofstream out("D:\\test.txt"); //создали файл для записи
    out.close();
    Ответ написан более двух лет назад
    Комментировать
    Комментировать
  • Почему ошибка в коде c++?

    scottparker
    scottparker @scottparker
    разве 0.19 не через точку пишется?)
    Ответ написан более двух лет назад
    Комментировать
    Комментировать
  • Как удалять элементы массива?

    wataru
    Wataru @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    По хорошему, вы должны использовать std::vector. А он умеет удалять все сам.

    std::vector<int> a = {1, 2 ,3 ,4 ,5};
    // Удалит элементы с l по r (l включительно, не удалит r).
    // Если надо удалить r-ый элемент, то добавьте +1 во второй аргумент.
    a.erase(a.begin()+l, a.begin()+r);


    Если же вы хотите делать руками, то надо просто посмотреть, куда двигаются элементы. Те, что до l - не двигаются. Те, что от l до r - исчезают. Те, что после r сдвигаются влево на r-l+1 позиций.

    for (i = l; i < n - 1 + l - r; ++i) {
      a[i] = a[i + r - l + 1];
    }
    // New length: n -1 + l - r;
    Ответ написан более двух лет назад
    1 комментарий
    1 комментарий
  • C++ или Java для первого языка?

    Mercury13 @Mercury13
    Программист на «си с крестами» и не только
    Java.
    «Технологии» вам не нужны, вам нужно программить что-то минимально действующее. А в Си++ слишком легко «выстрелить в ногу».
    А когда научитесь программить — тогда и Си (с крестами и без) станет понятнее.
    Ответ написан более двух лет назад
    Комментировать
    Комментировать
  • Можно ли в C++ передать в шаблонный параметр класса типа unsigned long размер инит-листа aka std::initializer_list::size() через конструктор?

    Александр Ананьев @SaNNy32
    А почему не сделать так?
    template <class T>
    class A {
       std::vector<T> array;
    public:  
       A(std::initializer_list<T> init_list): array(init_list)
       {
       }
    };
    Ответ написан более двух лет назад
    Комментировать
    Комментировать
  • Не могу разобраться со структурами в С++. Как решить задачу?

    WinPooh32
    WinPooh32 @WinPooh32
    Stack Overflow answer searching expert
    string Name[n];

    Зачем вам массив строк? std::string уже внутри сам управляет массивами.

    Раз у вас c++, то используйте только std::string (массивы чаров обычно понадобятся для взаимодействия с Си-шными библиотеками).

    struct info {
        std::string Name;
        int H;
        char Sex;
    };


    В качестве структуры для хранение возьмите std::vector.
    Пример работы с ним в вашем случае:
    std::vector<info> people;
    info man = WriteStruct(info);
    people.push_back(man);

    Пройти по массиву можно вот так:
    for (int i = 0; i < people.size(); i++) {
       info man = people[i];
    }


    upd: WriteStruct следует переименовать в ReadStruct, т.к. это названее лучше описывает происходящий в ней процесс.
    Ответ написан более двух лет назад
    3 комментария
    3 комментария
  • Ошибка munmap_chunk(): invalid pointer Process finished with exit code -6. Что делать?

    Makaroshka007
    Тимур Покровский @Makaroshka007
    ­
    int *firstarray = new int(size);
    Так вы создайте указатель не на массив, а на int со значением size. Скорее всего вы хотели сделать так:
    int *firstarray = new int[size];
    Ответ написан более двух лет назад
    Комментировать
    Комментировать
  • Почему выводит 0?

    rPman @rPman
    потому что
    cout << NumNewline(digit);
    а в самой функции стоит
    return 0;
    Ответ написан более двух лет назад
    Комментировать
    Комментировать
  • Как сделать массив если не знаешь его размера с++?

    Stalker31
    Дмитрий Павлов @Stalker31


    Вектор в C++

    — это замена стандартному динамическому массиву, память для которого выделяется вручную, с помощью оператора new.
    Разработчики языка рекомендуют в использовать именно vector вместо ручного выделения памяти для массива. Это позволяет избежать утечек памяти и облегчает работу программисту.
    Ответ написан более двух лет назад
    Комментировать
    Комментировать
  • Почему значение переменной меняется само собой?

    jamakasi666
    Дмитрий Александров @jamakasi666
    Просто IT'шник.
    https://0.30000000000000004.com/
    Ответ написан более двух лет назад
    6 комментариев
    6 комментариев
  • Какой аналог есть у list пайтона в с++?

    Rsa97
    Rsa97 @Rsa97
    Для правильного вопроса надо знать половину ответа
    vector
    Ответ написан более двух лет назад
    3 комментария
    3 комментария
  • Стоит ли учить C++ в 2020?

    kk95
    kk95 @kk95
    учить кому ? школьнику старших классов ? 20 летнему студенту ? 35 летнему мужику с 2 детьми ? человеку который разбирается в информатике ? человеку который просто любит поиграть в игры и умеет поставить винду ? учить чтобы писать софт ? учить чтобы делать игры ? учить чтобы поднимать бабло ? учить как хобби ?
    нет начальных данных. как вам ответят на него ?
    Ответ написан более двух лет назад
    Комментировать
    Комментировать
  • Почему в двух байтах хранятся числа от -32768 до 32767?

    Григорий @Griglapidus
    C++/Qt
    2 байта = 16 бит. 2^16 = 65536 или -32768 до 32767. Дальше по аналогии)
    Ответ написан более двух лет назад
    2 комментария
    2 комментария
Оценили как «Нравится»
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • Следующие →
Самые активные сегодня
  • Yorido Satoshi
    • 26 ответов
    • 0 вопросов
  • pantsarny
    • 9 ответов
    • 0 вопросов
  • Drno
    • 5 ответов
    • 0 вопросов
  • bolfduy
    • 1 ответ
    • 4 вопроса
  • Vindicar
    Vindicar
    • 5 ответов
    • 0 вопросов
  • NickNamee
    • 4 ответа
    • 0 вопросов
  • © Habr
  • О сервисе
  • Правила
  • Обратная связь
  • Блог

Войдите на сайт

Чтобы задать вопрос и получить на него квалифицированный ответ.
Войти через центр авторизации