gpt4 book ai didi

c++ - 具有三个参数的typedef是什么意思?

转载 作者:行者123 更新时间:2023-12-01 12:57:11 27 4
gpt4 key购买 nike

我正在尝试编译包含以下头文件的代码:

#ifndef FFT_H
#define FFT_H

#include<cmath>
#include<complex.h>
#include<vector>

#define Vec(a, b) std::vector<__typeof(*(a))> ((a), (a)+(b))

typedef double complex complex_t; // this is my trouble line!
typedef double real_t;

#endif

我的编译器因 typedef double complex complex_t;而跳闸

这对我来说很有意义,因为大多数typedef仅包含两个参数:类型和别名。

这段发布的代码来自 reputable source,所以我认为自己做错了什么。但是,我对为什么typedef会使用3个参数感到困惑。

最佳答案

是的,大多数typedef都包含别名和基础类型,但是不要求该类型必须是单个标记:

typedef unsigned long long int ULLI;
// \____________________/
// Many tokens for underlying type
因此,无论您的代码在什么环境下工作,似乎已经具有 double complex类型。
该类型实际上是 <complex.h>中包含的C标准的一部分,但是等效的C++ <ccomplex>/<complex.h> header 现在已被 <complex>替换,更适合C++,因此更合适的方法是包括它并使用 complex<double>类型。
我相信,从C++ 17开始, <ccomplex>/<complex.h>不再保留任何旧的C东西,而只是开始包括C++标准库中的其他非旧式 header 。
然后,在C++ 20中,他们完全放弃了它。摘自 C++20 [diff.cpp17.library](略作释义),其中详述了差异:

Change: Remove vacuous C++ header files.

Rationale: Empty headers implied a false requirement to achieve C compatibility with the C++ headers.

Effect on original feature: A valid C++ 2017 program that performs a #include of <ccomplex> (amongst others) may fail to compile. To retain the same behavior, a #include of <ccomplex> can be replaced by a #include of <complex>.

关于c++ - 具有三个参数的typedef是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61470567/

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