#include <iostream>
#include <string>
using namespace std;
struct Foo {
virtual ~Foo() = default;
int foo = 321;
};
struct Bar: public Foo {
int bar = 123;
};
int main() {
const Foo* ptr = new Bar();
std::cout << ptr << std::endl;
{
const Bar* ptr = dynamic_cast<const Bar*>(ptr);
std::cout << ptr << std::endl;
}
{
const Bar* ptr2 = dynamic_cast<const Bar*>(ptr);
std::cout << ptr2 << std::endl;
}
return 0;
}
программа выводит следующие строки, если скомпилировано с -O2
:
0x613c20
0
0x613c20
и если без -O2
, это похоже на:
0x614c20
0x400b70
0x614c20
В обоих случаях вторая строка выглядит проблемной c, когда имя целевой переменной конфликтует с именем исходной переменной dynamic_cast
. Я попробовал оба g cc 4.8 и 5.2, а также лязг 11.0.3.
Кто-нибудь знает об этом?