• Почему char занимает 1 байт, а строка с одним символом - 2 байта?

    Djaler
    @Djaler
    Сеньор-помидор
    Все правильно, этот 1 байт занимает символ конца строки '\0'
    Ответ написан
    Комментировать
  • Почему не отрабатывает перегруженный конструктор класса?

    @MiiNiPaa
    Потому что это copy-initialization. Чтобы она работала, нужен конструктор копирования который умеет принимать в качестве параметра временные обекты. (даже учитывая то что он не будут вызван благодаря copy-elision)

    Edit: en.cppreference.com/w/cpp/language/copy_initialization
    If T is a class type, and the type of other is different, or if T is non-class type, but the type of other is a class type, user-defined conversion sequences that can convert from the type of other to T (or to a type derived from T if T is a class type and a conversion function is available) are examined and the best one is selected through overload resolution. The result of the conversion, which is a prvalue temporary if a converting constructor was used, is then used to direct-initialize the object. The last step is usually optimized out and the result of the conversion is constructed directly in the memory allocated for the target object, but the appropriate constructor (move or copy) is required to be accessible even though it's not used.
    Грубо говоря сначала то, что справа неявно приводится к типу слева (при помощи конструктора) а потом используется для инициализации переменно с помощью move или copy-конструктора.
    Ответ написан
    Комментировать
  • Магия в Code::Blocks?

    gbg
    @gbg Куратор тега C++
    Любые ответы на любые вопросы
    Как приглашенный эксперт отвечаю - именно поэтому ГлюкиБлокс были выкинуты в пользу QtCreator
    Ответ написан
    3 комментария
  • Как использовать шаблоны при создании потоков с++11 std::thread?

    AtomKrieg
    @AtomKrieg
    Давай я поищу в Google за тебя
    Помогите компилятору определить тип функции для инстанцирования
    #include <iostream>
    #include <algorithm>
    #include <thread>
    
    template<typename T>
    T func (T& tid) {
    	std::cout << "Thread says: " << tid << std::endl;
    	return tid;
    }
    
    int main ()
    {
    	unsigned val = 35;
    	std::thread t (func<decltype(val)>, val);
    	t.join ();
    
    	system ("pause");
    	return 0;
    }
    Ответ написан
    7 комментариев
  • Как узнать, какую версию языка поддерживает транслятор?

    @MiiNiPaa
    Почитать стандарт языка и посмотреть как это определить.

    Например, если макро __STDC_VERSION__ имеет значение как минимум 201112L, значит компилятор поддерживает С11, как минимум 199901L — С99, 199409L — С94.

    Если ни один из этих макро не определён, но __STDC__ определён — С89
    Ответ написан
    Комментировать
  • Какую выбрать среду для написания кода на С++?

    tsarevfs
    @tsarevfs Куратор тега C++
    C++ developer
    Под windows студия это оптимальный вариант. Как только задачи станут немного сложнее, время на создание проекта будет незначительно по отношению к времени на написание кода. В качестве бонуса студия дает вам вменяемый отладчик, который очень полезен, если научиться им пользоваться.
    Ответ написан
    Комментировать
  • Есть ли уже литература по C++ вместе с Qt5, QtQuick, qml всреде QtCreator?

    Zifix
    @Zifix Куратор тега Qt
    Barbatum
    Кончено, можно учить сначала C++, потом Qt5 потом qml, но мне кажется что в одной книге это было бы удобнее.
    Размером такая книга будет с войну и мир, так что не думаю, что она когда-нибудь появится.

    Потому план такой:
    • Берем любую книгу по С++, того же Шилдта например
    • Берем любую книгу по Qt не ниже 4, того же Шлее например
    • Берем примеры программ из стандартной поставки и смотрим их

    Получится правильная общая картина, которая легко дополняется документацией и статьями. Вот еще хороший обзорный мануал: qmlbook.github.io
    Ответ написан
    Комментировать
  • Как собрать библиотеку под Windows?

    @vilgeforce
    Раздолбай и программист
    Открываете документацию на библиотеку, читаете, собираете. На столь общий вопрос иного ответа нет.
    Ответ написан
    Комментировать
  • В чем разница между int a() и int a=int()?

    @MiiNiPaa
    А теперь выведите typeid(first).name() на экран и удивитесь.

    Первая строчка это объявление функции first без параметров и возвращающая int. Имя функции превращается в указатель, указатель конвертируется в bool (true), который конвертируется в int (1).
    Ответ написан
    3 комментария
  • Как правильно маскировать/демаскировать фреймы (WebSocket)?

    gbg
    @gbg Куратор тега C++
    Любые ответы на любые вопросы
    У вас две проблемы, одна большая, вторая маленькая.
    Большая - вы пишите в кондово-мерзком стиле, под названием "Пешу на C++ как на Си, мне пофигу". Бросайте это.

    Маленькая - прозреваю, что int у вас 32 битный, а вы его на 50 с гэком рязрядов сдвигаете. Это на грани UB, честно говоря.

    Бросайте этот поганый стиль писания без циклов (так китайцы прошивки для фейко-айфонов лепят, им построчно оплачивают), учите наконец STL и пишите красиво.
    Ответ написан
    Комментировать
  • В чем ошибка в коде?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    запускать надо сразу с аргументами - это аргументный вызов, а не интерактивный (где ждут ввода от пользователя).
    Например, так:
    ocopy file1.txt file2.txt
    Ответ написан
    2 комментария
  • В чем ошибка в коде?

    @NeoZeed
    int main(int argc, char*argv[]).
    argc - количество передаваемых параметров программе,
    argv[] - массив параметров.
    Следовательно программу нужно скомпилировать, затем вызывать из командной строки с передачей параметров. Вызов должен содержать путь до скомпилированного файла и аргументы (судя по тексту программы - названия файлов ввода и вывода)
    Например, C:\MyProgram.exe "parametr1" "in.txt" "out.txt"
    (Возможно без кавычек и с полными путями до файлов in и out)
    Ответ написан
    1 комментарий
  • Адреса указателей?

    Nipheris
    @Nipheris Куратор тега C++
    Потому что указатели - прежде всего такие же переменные, как и любые другие (это очень важно понимать). Второе выведенное значение - это значение переменной b, и не особо важно, указатель это или нет (в нашем случае - да, указатель, и поэтому выведенное значение переменной b - некоторый адрес). Третье выведенное значение - это АДРЕС переменной b, и не имеет значения, что за тип у переменной b. Вы можете объявить int b или float b, и получите аналогичный результат.

    Вот что является отличительным моментом указателя - это как раз таки первое выведенное значение, а точнее, сама возможность его вывести. Для указателей (а также для любых пользовательских типов, реализующих operator*) доступна операция разыменования. Это дает возможность взять значение переменной b, интерпретировать его как адрес, а затем, в свою очередь, залезть в память по этому адресу и получить значение уже оттуда. В данном случае можно утверждать, что по адресу 0x011CD1C0 находится значение 66 (если его интепретировать соответственно типу указателя).
    Ответ написан
    1 комментарий
  • Адреса указателей?

    evnuh
    @evnuh
    Поиск Гугл помог мне, впусти и ты его в свой дом
    потому что первый адрес - это адрес ячейки памяти, по которому хранится значение 66
    второй адрес - это адрес ячейки памяти, по которому хранится адрес другой ячейки памяти, по которому хранится значение 66
    Ответ написан
    4 комментария
  • Есть ли смысл платить за использование опенсорс библиотек наподобие Awesomium?

    @nirvimel
    СНГ, по вашему, это что Папуасия какая-то? Тут что не действует законодательство в сфере авторского права?
    1. Обладатель исключительных прав на интеллектуальную собственность (произведение) в праве самостоятельно устанавливать условия, на которых он предоставляет право использования данного проведения. Эти формальные условия составляют лицензию.
    2. Потребитель в праве отказаться от предложенных ему (по лицензии) условий, это означает отказ от использования произведения, или согласиться на эти условия и осуществить использование. В случае согласия между потребителем и правообладателем начинает действовать договор использования, условия которого прописаны в лицензии.
    3. Не исполнение любого из пунктов договора одной из сторон может повлечь судебный иск от потерпевшей стороны.
    4. Суд четко пояснит непонятливым смысл "черных буковок на белом фоне".
    Ответ написан
    3 комментария
  • Qt. Как сериализовать объекты содержащие коллекции?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Для сереализации в Qt есть специальный класс QDataStream. У классов которые вы хотите сереализовать нужно реализовать два оператора (для чтения и для записи):
    QDataStream &operator<< (QDataStream &out, const T &obj);
    QDataStream &operator>> (QDataStream &in, T &obj);
    
    QFile f("path");
    if (f.open(QIODevice::ReadOnly) { // or WriteOnly, or ReadWrite
       QDataStream s(&f);
       T obj;
       s >> obj; // for write s << obj
    }

    Но у вас в коллециях указатели, т.ч. сереализоваться будут адреса, а не сами объекты. Эту проблему нужно как-то решить, т.е. если у вас QList<Institution> lst, то можно просто написатьs << lstдля сереализации, а если указатель, то нет, возможно написать соотвествующий оператор для указателя -- это решение.

    А еще возможно стоит присмотреться к JSON (с пятой версии поддержка входит в стандартную библиотеку Qt) если нужно именно сохранять в файлы, потом читать и иметь возможность поправить руками.

    PS код писал просто по памяти, поэтому может не скомпилироваться :) Но примерно дела обстоят так.
    PPS и лучше используйте какие-нибудь умные указатели вроде QSharedPointer, boost::shared_ptr или std::shared_ptr (с C++11)... Голые указатели уже моветон.
    Ответ написан
    1 комментарий
  • Где ошибка в реализации шаблонного класса потокобезопасной очереди?

    gbg
    @gbg Куратор тега C++
    Любые ответы на любые вопросы
    Да сколько можно баянные ошибки делать?

    Тела шаблонов - только в *.h файлах.
    Ответ написан
    4 комментария
  • Qt как создать много окон внутри одного?

    @Mercury13
    Программист на «си с крестами» и не только
    Сам не работал с этим под Qt, но называется это «многодокументный интерфейс» и простейший пример тут.
    doc.qt.io/qt-5/qtwidgets-mainwindows-mdi-example.html

    Также можно погуглить «Qt MDI».
    Ответ написан
    1 комментарий
  • Каково назначение системных вызовов sendto и epoll_wait в Android?

    @aol-nnov
    внизу андроида, внезапно, линуксовое ядро. почему системные вызовы должны отличаться?

    бионик. дальше сам :)
    Ответ написан
    Комментировать
  • Как правильно перевести из 16СС в 2СС?

    @MiiNiPaa
    А зачем переводить для определения значимого количества бит?

    unsigned long long number;
    std::cin >> std::hex >> number;
    
    int bits = 0;
    while(number != 0) {
        ++bits;
        number >>= 1;
    }
    Ответ написан
    2 комментария