我知道简单模板和模板特化的工作原理,但我对此感到困惑。
程序第一行的T t = T()
是做什么的?这是默认参数吗?以及如何确定程序的输出?
#include <iostream>
template<class T, T t = T()>
class A
{
private:
template<bool b>
class B
{
public:
static const int m_n = b ? 1 : 0;
};
public:
static const int m_value = B<(t > T())>::m_n - B<(t < T())>::m_n;
};
int main()
{
std::cout << A<int, -9>::m_value
<< A<bool, true>::m_value
<< A<char>::m_value << std::endl;
return 0;
}
这是一道关于 C++ 评估测试的问题,我正在努力理解。
最佳答案
是的。第二个参数是这个模板的默认参数。
如果您知道这一点,那么确定输出应该相当简单。我会为你做第一个:
A<int, -9>::m_value
int
是T
使用的数据类型,int t
的值为-9
。
这一行:
static const int m_value = B<(t > T())>::m_n - B<(t < T())>::m_n;
这样计算(其中 int()
为零):
static const int m_value = B<(-9 > 0)>::m_n - B<(-9 < 0)>::m_n;
评估如下:
static const int m_value = B<false>::m_n - B<true>::m_n;
评估如下:
static const int m_value = 0 - 1;
最终评估如下:
static const int m_value = -1;
所以:
std::cout << A<int, -9>::m_value
等同于:
std::cout << -1
现在尝试自己找出其余部分。
关于C++模板默认参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28917941/