gpt4 book ai didi

c++ - 使用decltype()和三元运算符有条件地选择一种类型

转载 作者:行者123 更新时间:2023-12-01 14:43:47 26 4
gpt4 key购买 nike

我有一个文件a.cpp:

#include <bits/stdc++.h>

using namespace std;

int main(){
int a=5;
double b=4.3;
decltype(a>b?a:b) n;
cout << typeid(n).name();
}

上面代码的输出是 d ,但我希望它是 i ,因为“a”大于“b”

我正在尝试了解decltype。你能告诉我我在这里想念的吗?

我正在使用gcc版本6.3.0(MinGW.org GCC-6.3.0-1)。

最佳答案

C++是一种静态类型的语言。

这意味着事物的类型不能取决于运行时条件。

因此,表达式a>b?a:b将始终求值为相同类型的值。这是条件运算符规则的一部分。

在这种情况下,“相互兼容的类型”(我已经把这个术语做了)是double,因此您将始终获得double(请参阅规则here)。

如果a赢得条件,则将其从int转换为double,除了在decltype中,您的代码是“未评估的上下文”(因为在运行时任何内容都不会影响结果),因此条件甚至不会执行,只会执行可能的结果类型从条件运算符的参数类型计算得出。如果存在多个可能的结果类型,那么代码将是模棱两可的,并且您的程序将不可编译。

您可以使用std::variant这样的魔术来获得此行为,但请考虑是否真的需要/想要它。

关于c++ - 使用decltype()和三元运算符有条件地选择一种类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59445414/

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