所以我最近正在尝试一些模板,而这正是我偶然发现的代码:
template <typename T>
int someFunction(T someParameter)
{
return std::is_same<T, bool>::value ? 1 : 0 +
std::is_same<T, char>::value ? 2 : 0 +
std::is_same<T, int>::value ? 3 : 0;
}
因此,基本上是一堆条件运算符,如果为true,则返回值;如果为false,则根本不返回值。如果将它们加在一起,则可以确定参数是什么数据类型。
但是,我意识到了一些。括号重要吗?我尝试将方括号括在代码中,如下所示:
template <typename T>
int someFunction(T someParameter)
{
return (std::is_same<T, bool>::value ? 1 : 0) +
(std::is_same<T, char>::value ? 2 : 0) +
(std::is_same<T, int>::value ? 3 : 0);
}
但是输出仍然相同。所以我在想,也许编译器看到这样的东西:
template <typename T>
int someFunction(T someParameter)
{
return std::is_same<T, bool>::value ? 1 : (0 +
std::is_same<T, char>::value ? 2 : (0 +
std::is_same<T, int>::value ? 3 : 0));
}
因此,从某种意义上说,它首先评估最后一个条件运算符,然后向后进行运算。但是我仍然无法解决这个问题,并且不确定我是否正确理解了这一点。
有人可以告诉我这里的运算符优先级是什么,如何执行?谢谢。
operator+
具有比条件运算符高的precedence,所以return std::is_same<T, bool>::value ? 1 : 0 +
std::is_same<T, char>::value ? 2 : 0 +
std::is_same<T, int>::value ? 3 : 0;
被解释为