yigal_s: (Default)
yigal_s ([personal profile] yigal_s) wrote2011-10-24 06:46 pm
Entry tags:

этюды на С++ - фокусы с преобразованиями типов указателей

Опять же, наткнулся на некоторую особенность С++ ранее мне неизвестную. Опять же, пока не знаю, баг это или фича стандарта. Похоже, снова фича стандарта. (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++ их не поддерживает напрямую, но позволяет сделать то же самое "в три приёма".

Post a comment in response:

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