LINUX.ORG.RU

Когда начинается полнолуние и вода в кранах становится фиолетовой

Pantserovik
()

В таких, например =))):

#include <iostream>

int main()
{
  int *pointer= new int(1);

  std::cout << "before: " << pointer<< "\n";
  std::cout << "after: " << reinterpret_cast<int*>(reinterpret_cast<short>(pointer)) << "\n";

  delete pointer;
  std::cin.get();
}

Не делайте так)))

m4n71k0r
()

dynamic_cast

anonymous
()
Ответ на: комментарий от rival

Ой, точно!

Просто под рукой была Visual Studio 2010. Она-то и съела этот код, не подавившись.

GCC ругается именно так, даже на C-каст )))

m4n71k0r
()
Ответ на: комментарий от PayableOnDeath

Ни в каких.

Ну нет же :)

#include <iostream>

class A 
{
public:
	virtual void foo(){}
};

class B : public A
{
};

int main()
{
	A* ptr = new A();
	B* ptr2 = dynamic_cast<B *>(ptr);
	std::cout << "Old: " << ptr << std::endl;
	std::cout << "New: " << ptr2 << std::endl;
	return 0;
}

Результат (проверил на старом icc 7.1, что под рукой уж оказалось):

[~/dctest] % ./test
Old: 80b60f0
New: 0
gizzka ★★
()

При преобразовании к предку, идущему в списке наследования не первым.

anonymous
()

Вот, еще один показательный пример, кастинг специально сдела в «C» стиле, дабы не было мыслей, что это особенность только dynamic_cast-а:

#include <stdio.h>

class A
{
        int a;
public:
        A() {}
        virtual ~A() {}
};

class B
{
        int a;
public:
        B() {}
        virtual ~B() {}
};

class C : public A, B
{
        int a;
public:
        C() {}
        virtual ~C() {}
};

int main()
{
        C *c = new C();
        printf("%p\n%p\n%p\n",
                c,
                (A*)c,
                (B*)c); 
}

Вывод:

$ ./1
0x100100080
0x100100080
0x100100090
$ g++ --version 
i686-apple-darwin10-g++-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5664)
Copyright (C) 2007 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

hydraulicbrakefluid
()
Ответ на: комментарий от whatfor

потому что это не Си.

не POD-типы могут храниться в памяти как угодно, мы не можем делать никаких предположений о том, как устроен объект (hello to C-style coders xD).

плюс есть еще такая штука как выравнивание.

dpt-ru
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.