大佬教程收集整理的这篇文章主要介绍了如何用C模板理解输出结果,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
#include <iostream> template <int n,int Mod2=N%2> struct Print { Print() { std::cout << N << std::endl; } }; template <int n> struct Print<N,0> { Print() { std::cout << "Even!" << std::endl; } }; template <int n> struct Print<N,1> { Print() { std::cout << "Odd!" << std::endl; } }; template <int n> struct EvenOdd { EvenOdd() { EvenOdd<N+1>(); Print<N>(); } }; template <> struct EvenOdd<10> { EvenOdd() { std::cout << "Hey!" << std::endl; } }; int main() { EvenOdd<0>(); return 0; }
$./a.out Hey! Odd! Even! Odd! Even! Odd! Even! Odd! Even! Odd! Even!
我预测到了
EvenOdd<10>::EvenOdd() //=> "Hey!"
最后被称为.但是,这是错误的.
为什么“嘿!”首先输出?
这是发生的事情:第一件事EvenOdd< 0>确实是实例化EvenOdd< 1>.只有完成后,才会调用Print< 0>.并且直到EvenOdd< 1>才完成.已完成实例化EvenOdd< 2>和印刷,等等:
EvenOdd<0> EvenOdd<1> EvenOdd<2> EvenOdd<3> EvenOdd<4> EvenOdd<5> EvenOdd<6> EvenOdd<7> EvenOdd<8> EvenOdd<9> EvenOdd<10> std::cout << "Hey!" << std::endl; Print<9> Print<8> Print<7> Print<6> Print<5> Print<4> Print<3> Print<2> Print<1> Print<0>
以上是大佬教程为你收集整理的如何用C模板理解输出结果全部内容,希望文章能够帮你解决如何用C模板理解输出结果所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。