gpt4 book ai didi

c++ - 带有 decltype bool 算术的尾随返回类型

转载 作者:太空宇宙 更新时间:2023-11-03 10:46:15 26 4
gpt4 key购买 nike

我决定尝试使用如下所示的 delctype 来处理尾随返回类型:

template<typename T, typename U>
auto Add(T t, U u) ->decltype(t,u)
{
return t + u;
}

例如,如果我发送整数或 double 值,这将非常有效

Add(10,11); //21
Add(5.35,2.22); //7.57

但后来我问自己,这对 bool 算术有用吗?

Add(true,true); // = 1 + 1 = 1;
Add(true, false); // = 1 + 0 = 1
Add(false, false); // = 0 + 0 = 0;

在这种情况下它工作正常,但后来我决定尝试以下方法:

->decltype(t + u)

这给了我结果:

Add(true,true); // = 1 + 1 = 2;
Add(true, false); // = 1 + 0 = 1
Add(false, false); // = 0 + 0 = 0;

我假设 decltype(t+u) 将返回类型推断为 int 而不是 bool?为什么是这样? decltype 是否会选择类型层次结构?

最佳答案

简答:因为表达式的类型是 int 而不是 bool

长答案:通过调用 Add(true, true),您的模板类型参数 TU 被推断为 bool。因此,表达式t, u 的类型是bool。请注意,正如@ccom 所指出的,此表达式中的逗号是逗号运算符。

因为你不能用算术方式添加 bool 值(符号 + 有时在逻辑中用来表示 or 运算符,在 c++ 中是 |),c++ 会自动提升两个 bool 值到整数,然后执行加法。

decltype(t, u) 的情况下,您的返回类型是 bool,因此会发生另一个隐式转换,迫使您的整数 2 变为 bool 值(true,或 1,当转换回 int)

decltype(t + u) 的情况下,返回类型是表达式的类型 (int),因此最终转换根本没有完成 - 给你2.

关于c++ - 带有 decltype bool 算术的尾随返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21135697/

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