Ответ: Відповідь: Вопрос по С++
Зачем такие ухищрения? Неужели код
Код:
std::pair<void*, int> root;
root.first = NULL;
не компилируется? Или же
Код:
std::pair<void*, int> root(NULL, 0);
? У меня
Код:
Using built-in specs.
Target: i486-linux-gnu
Configured with: ../src/configure -v --enable-languages=c,c++,fortran,objc,obj-c++,treelang --prefix=/usr --enable-shared --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --enable-nls --program-suffix=-4.1 --enable-__cxa_atexit --enable-clocale=gnu --enable-libstdcxx-debug --enable-mpfr --enable-checking=release i486-linux-gnu
Thread model: posix
gcc version 4.1.2 (Ubuntu 4.1.2-0ubuntu4)
прекрастно справляетс со всем этим. Я не пойму зачем nil этот вообзе сдался?
И зачем такие заморочки ещё с определением nil'а? Зачем приведение? По-моему, NULL вообще как
определен.
Сразу не заметил, но хочется добавить, что для присвоения operator= (const T& etalon) используется ссылка, которая внутри операта определена как константа. Это сделано для того, что бы оператор присвоения "внутри себя" не мог изменить значение аргумента, но ссылка в ряде случаев тоже может быть весьма необходима. Чтобы не получился оператор со свойствами предиката
Обрати внимание на конвертирование ссылок и указателей.