C++ 通常在哪里可以找到安全的SCL?

C++ 通常在哪里可以找到安全的SCL?,c++,visual-c++,visual-studio-2005,C++,Visual C++,Visual Studio 2005,我确信我在使用VisualStudio2005构建的项目中遇到了一些std::vector边界问题。根据,我可以使用\u SECURE\u SCL控制边界检查。它向我保证,它在默认情况下处于启用状态—由某个地方的\define\u SECURE\u SCL 1提供。我当然找不到它,如果我将该定义滑入stdafx.h,它与任何东西都不会冲突。我错过什么了吗?使用\u SECURE\u SCL的“正常”方式是什么?默认情况下,它在头文件yvals.h中定义 如果\u ITERATOR\u DEBU

我确信我在使用VisualStudio2005构建的项目中遇到了一些
std::vector
边界问题。根据,我可以使用
\u SECURE\u SCL
控制边界检查。它向我保证,它在默认情况下处于启用状态—由某个地方的
\define\u SECURE\u SCL 1
提供。我当然找不到它,如果我将该定义滑入
stdafx.h
,它与任何东西都不会冲突。我错过什么了吗?使用
\u SECURE\u SCL
的“正常”方式是什么?

默认情况下,它在头文件
yvals.h
中定义

  • 如果
    \u ITERATOR\u DEBUG\u LEVEL
    HAS\u ITERATOR\u DEBUG
    都未定义,
    HAS\u ITERATOR\u DEBUG
    在调试生成中默认为
    1
  • 如果
    \u SECURE\u SCL
    未定义,并且
    具有迭代器\u调试
    定义为
    1
    \u SECURE\u SCL
    默认为
    1

如果定义了
\u ITERATOR\u DEBUG\u LEVEL
,则会使用不同的规则。有关更多信息,请参阅头文件。

根据链接文档,“安全”SCL仅与迭代器相关,而不是所有std::vector内容。但我访问向量的99%的方式是通过.front()、.back()或运算符[],所有这些都在该文档中明确列出。。。所以它对我来说很重要:-)谢谢。我仍然看不出yyvals.h是如何(或是否)包括在内的,但至少其中的代码比MS文档更清楚发生了什么。OK-_ITERATOR_DEBUG_级别似乎只适用于Visual Studio 2012以后的版本。VS2005只知道安全SCL,并且有迭代器调试。yyvals.h通过include then包含,而后者最终包含yyvals.h。很好,我给你打个勾-谢谢!