gpt4 book ai didi

c++ - 条件运算符中的运算符优先级

转载 作者:行者123 更新时间:2023-12-01 14:20:18 25 4
gpt4 key购买 nike

所以我最近在试验一些模板,这是我偶然发现的代码:

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);
}

但是输出还是一样。所以我在想也许编译器会看到这样的东西:

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;

被解释为

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;

更清晰

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 ) );

它会给出结果 1对于 bool , 2对于 char , 3对于 int .

关于0 + std::is_same<T, ...>::value , std::is_same<T, ...>::valuebool , 当用作 operator+ 的操作数时, 它将被转换为 int隐式为 1对于 true , 0对于 false .之后将加法结果作为条件,转换为bool返回为 false对于 0true对于非零。

关于c++ - 条件运算符中的运算符优先级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61648567/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com