gpt4 book ai didi

c++ - 为什么 checked_array_iterator 在 VS2013 中不包含 就可以工作,但在 VS2017 中却失败了?

转载 作者:太空狗 更新时间:2023-10-29 22:57:12 25 4
gpt4 key购买 nike

给定以下代码:

#include <memory>
#include <locale>

int main() {
auto source = std::make_unique<int[]>(16);
auto dest = std::make_unique<int[]>(16);
auto dp = stdext::checked_array_iterator<int*>(dest.get(), 16);
std::copy_n(source.get(), 16, dp);
return 0;
}

它通过运行 cl.exe /EHsc <file>.cpp 在 Visual Studio 2013 上干净地编译.但是,在 Visual Studio 2017 上,cl.exe 引发了以下错误(以及其他错误) :

vc12.cpp(7): error C2653: 'stdext': is not a class or namespace name
vc12.cpp(7): error C2065: 'checked_array_iterator': undeclared identifier

为什么这段代码不再编译?

最佳答案

该示例缺少一个 #include <iterator> .从技术上讲,Visual Studio 2013 也缺少它(请参阅 Why include what you use ),但由于包含链,它在那里工作。在 Visual Studio 2013 和 Visual Studio 2017 之间包含 std -标题得到了改进。

示例显示#include <locale> .在旧版本中,#include <iterator>locale 的包含链的一部分,在 Visual Studio 2017 中不再是这种情况。

但是VS2017的文档太新了,目前很难找到。重要文件可以在doc.microsoft.com找到, 它列出了所需的 header <iterator> .

关于c++ - 为什么 checked_array_iterator 在 VS2013 中不包含 <iterator> 就可以工作,但在 VS2017 中却失败了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45614590/

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