大佬教程收集整理的这篇文章主要介绍了c – VC是否符合有关警告C4407的标准?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
struct A1 { int a1; }; struct A2 { int a2; }; struct B: A1,A2 { void f() { std::cout << this << '\n'; } }; int main() { B b = B(); void (B::*pb)() = &B::f; void (A2::*pa)() = (void (A2::*)())pb; // performs static_cast actually std::cout << (std::uintptr_t&)pb << '\n'; std::cout << (std::uintptr_t&)pa << '\n'; B* pB = &b; A2* pA = pB; std::cout << pB << '\n'; std::cout << pA << '\n'; (pB->*pb)(); (pA->*pa)(); }
生成的代码不正确,因为在调用pa时不调整指针pA,导致f中的指针值错误.但是,代码在GCC和clang中编译良好而没有任何警告(严格别名除外).指针pA在GCC和clang生成的代码中进行了适当调整.所以,我想知道标准对此有何看法?上述代码中的演员是否按照标准罚款?或者它是GCC和clang的非标准扩展?
以上是大佬教程为你收集整理的c – VC是否符合有关警告C4407的标准?全部内容,希望文章能够帮你解决c – VC是否符合有关警告C4407的标准?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。