【发布时间】:2019-12-22 15:08:31
【问题描述】:
我有一个文件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++ 是一种静态类型语言。
-
@PrashantKumarNirmal 如果使用相同类型的参数调用该函数并使用其返回值(这将是对超出其生命周期的参数之一的引用),该函数会导致未定义的行为。你不应该使用它。您需要删除尾随返回类型以使其行为正确。在任何一种情况下,它都会返回一个编译时固定类型,由所描述的规则确定,例如here.
-
顺便说一句,关于@walnut 所描述的事情,这是真的,这也是我(和许多其他人)觉得C++ 对普通用户完全失控的原因。让无声但又很关键的错误真的不应该那么简单。
-
@LightnessRacesBY-SA3.0 Clang 至少给出了一个warning。令人惊讶的是,GCC 没有。