Перегрузка операторов и конструирование объекта через new
Добавлено: 2008-08-18 22:33:28
Мне трудно было представить, что я когда-нибудь буду материть разработчиков компилятора с++ под FreeBSD, но после 3 часов мыкания по САБЖу это было.
Хочется узнать, прав я или нет. Суть вопроса я тоже не мог себе преставить, но создались предпосылки для перегрузки оператора [] для моего класса (не зря же мозги сушил на эту тему). Эта перегрузка никак не хотела работать, и я упростил её до преобразования типа класса, который тоже не работает при конструировании обьекта класса при помощи new. Вот упрощённый пример:Где-то в программе:Этот упрощённый пример, практически переписанный из книги, не работает, компилятор ругается - пишет, что неверное преобразование типа. Это начинает работать, если написать так.
Где-то в программе:Так вот мне очень интересно, почему сиё не хочет работать при выделении памяти для объекта через new. В этом есть какой-то специальный смысл, или это что-то типа бага компилятора? Надо проверить это на Visual Studio, или какой там компилятор можно считать эталонным? Может найдётся человек, понимающий изнанку с++...
Интересно также, если это баг, то кому и как на него жаловаться?
На всякий случай: FreeBSD 7.0, компилятор стандартный, файлы кода имеют расширение cpp, компилирую так: c++ -o bin pr1.cpp pr2.cpp... с присоединением нужных библиотек через -l.
Хочется узнать, прав я или нет. Суть вопроса я тоже не мог себе преставить, но создались предпосылки для перегрузки оператора [] для моего класса (не зря же мозги сушил на эту тему). Эта перегрузка никак не хотела работать, и я упростил её до преобразования типа класса, который тоже не работает при конструировании обьекта класса при помощи new. Вот упрощённый пример:
Код: Выделить всё
Class A {
double d;
public:
A(double D):d(D) {}
operator double() { return d;}
};
Код: Выделить всё
oA* = new A(1.2);
double D = A;
Где-то в программе:
Код: Выделить всё
A oA(1.2);
double D = A;
Интересно также, если это баг, то кому и как на него жаловаться?
На всякий случай: FreeBSD 7.0, компилятор стандартный, файлы кода имеют расширение cpp, компилирую так: c++ -o bin pr1.cpp pr2.cpp... с присоединением нужных библиотек через -l.