yigal_s: (Default)
[personal profile] yigal_s
Опять же, наткнулся на некоторую особенность С++ ранее мне неизвестную. Опять же, пока не знаю, баг это или фича стандарта. Похоже, снова фича стандарта. (UPD: фича, да не та, код работает совсем не так, как от него я ожидал).

Оказывается, С++ куда более толерантен к преобразованию ссылочных типов, чем к преобразованию типов указателей. Речь, разумеется, о static casts, даже об implicit casts, т.е. о преобразованиях полностью санкционированных. Никакой грубой силы.

class A{};
class B : public A {};

void checker()
{
	B **ppB;
#if 0
	A * const * ppA = ppB; // this fails!
#endif

	B * &rpB = *ppB;
        A * const &rpA = rpB;
	A * const * ppA = &rpA;
}


По идее, преобразования эти безопасны, непонятно почему C++ их не поддерживает напрямую, но позволяет сделать то же самое "в три приёма".
This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting