← All posts tagged C++

borman
C++ Mac говно libc++ СЯУ, что в libc++ cin всегда читает по одному символу, зажимая мьютекс на каждый вызов getchar.
Ололо: github.com
СИПЛЮСПЛЮС КОКОКО ПРОИЗВОДИТЕЛЬНОСТЬ КОКОКО
borman
C++ говно Дико бесит, конечно, что в языке нет одновременно вменяемой и общепринятой библиотеки для I/O. Хоть бери и каждый раз наворачивай тонкую обертку над posix.
borman
C++ Каждый раз, когда я вижу, как в класс чисто по фану подмешивают какой-нибудь там "boost::noncopyable", я думаю "да кто ты такой, сука, чтобы мне запрещать!".
borman
C++ code ub
/Совершенно случайно/ обнаружил занятное.

Допустим, кто-то опечатался, и поэтому у нас есть функция

bool test() {
  return test();
}


При компиляции, GCC выдает логичное:

test():
.L2:
 jmp .L2
 

Но Clang (3.4.0, -O2) удивляет, особенно если обнаружить это после запуска:

test():                               # @test()
 xorl %eax, %eax
 ret

Вот так вот.
borman
лытдыбр C++ programming Интересное ощущение — вытащить свою софтину пятилетней давности на Qt.
— Оно сходу собирается и работает
— Там cmake o_O (более пристальное изучение показало, что я его впилил через год после написания)
— Поблевал на кодстайл (странно что я не ставил пробелы вокруг бинарных операторов)
— Неэлегантно — в порыве наведения порядка аксессоры-однострочники были вынесены из класса в реализацию
— Оверинжиниринг — зачем-то вхреначил pimpl в программе из пяти файлов.

Но вообще, увлекательное чтиво.
borman
Python ? C++ programming Жуйк, а ты пользовался boost::python или PyCXX? Я в консёрне, тащить ли одного из этих монстриков, при том что у меня есть некоторые вопросы в плане кошерности дизайна, или пилить свой тонкий микровелосипед над голым сишным API. А, да, стоит задача написания нативного расширения.
borman
? C++ programming code
А вот интересно стало, как у "взрослых" принято делать обходы каких-нибудь древесных структур, например? Детишки, я знаю, для этого пишут рекурсию, что чревато срывом стека в реальной жизни. Я вот решал подобную задачу и сделал подобное:

void SomeTreeFormat::writeTree(ostream &out, TreeNode *tree)
{  
    out << tree->size() << endl;

    class SomeTreeFormatDelegate: public TreeNode::Delegate
    {
        size_t m_indent;
        ostream &m_out;
    public:
        SomeTreeFormatDelegate(ostream &out): m_indent(0), m_out(out) {}
        void onEnterNode(TreeNode *node, TreeNode *)
        {
            m_out << Indent(m_indent) << node->name() << " " << node->id() << endl;
            m_indent += 4;
        }
        void onExitNode(TreeNode *, TreeNode *)
        {
            m_indent -= 4;
        }
    } delegate(out);
    tree->traverse(&delegate);
}

Что думают товаг'ищи специалисты? Вроде как, в С++11 есть замыкания и можно так не ебаться и сделать лямбды, хотя я не изучал этот вопрос, но интересует, как делают во всем привычном С++03.
borman
C++ msvs программизм На заметку: MSVC++ очень странно ведет себя с шаблонами. По каким-то причинам, он вместо того, чтобы находить ошибки, тупо игнорирует их и генерит пустой код, после чего взбухает линкер. Добился компиляции через gcc (он мне сразу по полочкам разложил, что где не так) --- все заработало и в msvs.
borman
? C++ GCC А вот интересная задачка --- написать на c++ класс, оборачивающий int, чтобы при включенном оптимизатор генерился ровно такой же код, как если использовать int напрямую. Интересно, такое вообще возможно?