Tôi có một cái gì đó tương tự như sau trong mã của tôi:bảng ảo trên lớp nặc danh
#include <iostream>
#include <cstdlib>
struct Base
{
virtual int Virtual() = 0;
};
struct Child
{
struct : public Base
{
virtual int Virtual() { return 1; }
} First;
struct : public Base
{
virtual int Virtual() { return 2; }
} Second;
};
int main()
{
Child child;
printf("ble: %i\n", ((Base*)&child.First)->Virtual());
printf("ble: %i\n", ((Base*)&child.Second)->Virtual());
system("PAUSE");
return 0;
}
tôi mong đợi này để cung cấp sản lượng này:
ble: 1
ble: 2
và nó làm như vậy, khi biên soạn dưới GCC (3.4.5 Tôi tin).
Biên dịch và chạy này dưới Visual Studio 2008 tuy nhiên, mang đến cho này:
ble: 2
ble: 2
là gì thú vị, là nếu tôi cung cấp cho các tên struct cơ sở có nguồn gốc từ (struct s1 : public Base
), nó hoạt động một cách chính xác.
Hành vi nào, nếu có, là chính xác? VS có bị prissy hay là nó tuân theo tiêu chuẩn? Tôi có thiếu cái gì quan trọng ở đây không?
Làm việc như mong đợi trong gcc.Mặc dù là thẳng thắn Tôi đã hy vọng nó không được biên dịch. –
* VS tôn trọng tiêu chuẩn *? Ha ha ha ha ha ... – wallyk
Hey, VC++ đã nhận được tốt hơn nhiều ở đó. – GManNickG