我最近写了以下代码:
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <string>
#include <vector>
#include <array>
#include <set>
#include <map>
#include <unordered_map>
using namespace std;
using ll = long long;
constexpr int N = 5e4 + 5;
constexpr ll INF = (ll)1e12;
array<basic_string<int>, N> c, tc;
int n, m;
array<basic_string<ll>, N> sl, sr, sm;
array<ll, N> val, sv;
ll ans;
int main()
{
return 0;
}
main函数里面的代码并不重要,所以我省略了。
当我尝试在 Windows 中使用选项 -std=c++20 在“gcc 版本 14.2.0(Rev1,由 MSYS2 项目构建)”中编译它时。它编译了 10 多秒,并获得了至少 8 MB 的可执行文件,这比大多数其他代码要大得多。但如果我使用c++17或更低版本,它可以正常编译。而如果我把数组改成C类型数组,就可以正常编译了。另外,如果我使用“gcc version 12.2.0(x86_64-posix-seh-rev1,由 MinGW-W64 项目构建)”或 clang,它也可以工作。
我们相信这与 C++20 有关,但我们并不确切知道。那么有什么问题吗?谢谢。
我觉得编译结果不应该是这样的,不应该需要那么多时间和内存。
这个问题是多种因素综合作用的:
数组c, tc;
向量说明c(N), tc(N);