lem*_*age 2 c++ gcc clang c++17
std::reduce()我在使用C++17 中的方法与 GNU G++17 和 Clang++ 17/20 编译器时遇到错误。尽管包含<numeric>应提供对reduce()方法的访问的标头,但编译器报告该方法未在当前作用域中声明。但是,当我切换到 GNU G++20 编译器时,代码编译时没有任何问题。
代码示例:
#include <iostream>
#include <numeric>
int main() {
int arr[] = {1, 2, 3, 4, 5};
// Attempting to use std::reduce() method
int sum = std::reduce(std::begin(arr), std::end(arr), 0);
std::cout << "Sum: " << sum << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
错误消息(编译器:GNU C++17 7.3.0):
program.cpp: In function 'int main()':
program.cpp:8:20: error: 'reduce' is not a member of 'std'
int sum = std::reduce(std::begin(arr), std::end(arr), 0);
^~~~~~
Run Code Online (Sandbox Code Playgroud)
错误消息(编译器:Clang++ 17/20):
p71.cpp:8:20: error: no member named 'reduce' in namespace 'std'
int sum = std::reduce(std::begin(arr), std::end(arr), 0);
~~~~~^
1 error generated.
Run Code Online (Sandbox Code Playgroud)
只有当我使用 GNU C++20 编译器时,代码才能编译没有任何问题。但是,我很困惑,因为我已经包含了<numeric>标头,并且该reduce()方法是在 C++17 标准中引入的,应该可以访问。我想知道为什么在使用 GNU G++17 和 Clang++ 17/20 编译器时编译器无法编译代码。
我正在寻求澄清,以了解为什么某些编译器会发生此错误,而其他编译器不会发生此错误。有人可以帮助我理解并解决这个问题吗?reduce()使用 Clang 编译器时是否存在与该方法相关的任何怪癖或限制?任何帮助将不胜感激。预先感谢您的帮助!
该std::reduce函数是标准库的一部分,以C++17. 对于GNU,它是在gcc版本中实现的9.1。我无法确定版本,clang但它至少对我有用clang-12。
是否能够使用有两个限制因素std::reduce:1)它是否在您正在使用的编译器版本的标准库中;2)您是否已经C++17或稍后选择作为语言标准。
根据上面的描述,您使用的gcc版本7.3.0尚未std::reduce在相应的标准库中实现。
说您正在使用GNU C++17或GNU C++20编译器可能对应于许多不同的版本,其中gcc每个版本对语言功能和标准库功能都有不同级别的支持。
| 归档时间: |
|
| 查看次数: |
249 次 |
| 最近记录: |