nvcc 不支持 C++11 函数 iota()?

C++11 function iota() not supported by nvcc?

我试图编译这段代码:-

#include <vector>

using namespace std;

int main() {
    vector<int> v(5);
    iota(v.begin(), v.end(), 0);
}

我用这个命令编译它:-

D:\workspace\test>nvcc main.cpp --std=c++11

(因为没有指定标准,我得到了 "identifier iota() not found" 错误)

我得到这个错误:-

nvcc warning : The -std=c++11 flag is not supported with the configured host compiler. Flag will be ignored.
main.cpp
main.cpp(7): error C3861: 'iota': identifier not found

如何指定我希望 nvcc 使用的 C++ 标准?

另外,用 g++ 分别编译主机代码,用 nvcc 编译设备代码,然后用 nvcc 链接对象是行不通的。我得到 .

我认为您需要添加 #include <numeric>。 enter image description here

没有必要。默认情况下,命令行工具 nvcc 使用 Microsoft 的 cl.exe。如果您的 cl.exe 已更新,std 选项将不可用。 cl.exe 自动支持所有最新的 C++ 标准的功能。

但是,在 cl.exe 中,iota() 等一些函数并未在 std 命名空间中定义。相反,iota() 在 numeric.h 头文件中定义。因此,对于 运行 该代码,您需要包含上述头文件。最终代码应如下所示:-

#include <vector>
#include <numeric.h>

using namespace std;

int main() {
    vector<int> v(5);
    iota(v.begin(), v.end(), 0);
}

代码可以通过命令编译:-

nvcc main.cpp