gpt4 book ai didi

c++ - 缺少包含不会在 RedHat 6 上产生编译错误

转载 作者:行者123 更新时间:2023-11-30 01:02:08 24 4
gpt4 key购买 nike

此代码段无法编译,因为 std::accumulate在 header numeric 中找到,不包括在内。

#include <algorithm>
#include <vector>

int main () {
std::vector<int> vec{ 1, 2, 3, 4 };
return std::accumulate(vec.begin(), vec.end(),0);
}

compiler explorer给我正确的错误信息

<source>(6): error: namespace "std" has no member "accumulate"
return std::accumulate(vec.begin(), vec.end(),0);

我使用的是 RedHat 6 和英特尔编译器版本 18.0.3。如果我用这个设置编译它,我不会出错并且结果很好。不会显示警告,即使使用了 -Wall

我的问题是,为什么我没有收到相应的错误消息?

最佳答案

why don't I get an appropriate error message?

因为标准库头文件之一 <algorithm><vector>您用于编译的确实包括 <numeric>他们自己。这是一个常见的可移植性问题;您的代码恰好使用特定的标准库实现进行编译,但无法使用另一个实现进行构建。库实现可以自由地将标准头文件包含在标准头文件中。也许您的 <algorithm> 中有一些功能使用任何 <numeric> 实现算法,就是这样。

您遇到的编译器错误是 include-what-you-use 等工具的原因存在。使用 iwyu她会添加 #include <numeric>到你的片段。另请注意,没有警告标志会影响编译结果。要么出现编译器硬错误,要么什么都没有。

关于c++ - 缺少包含不会在 RedHat 6 上产生编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56786341/

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