c++ - 为什么 `size_t`在Windows 2019的VS 2019和Clang 9中没有标题的情况下可以工作?

标签 c++ size-t

Where do I find the definition of size_t?的答案还多的问题。

#include <iostream> //comment this size_t still works, but std::size_t doesn't work
#include <stdlib.h> //comment this size_t still works

int main(int argc, char* argv[])
{        
    size_t t;
    std::size_t t;
    return 0;
}

在Visual Studio 2019中:

size_t的定义似乎在vcruntime.h中

(1)即使不包含 header ,size_t仍然有效,为什么?生成系统可以自动包含诸如vcruntime.h之类的 header ,还是可以通过诸如内置类型之类的其他机制来实现?

(2)std::size_t仅在包含iostream且F12也跳到vcruntime.h中的定义时才能使用。但是搜索整个MS VC运行时
来源(例如... \ VC \ Tools \ MSVC \ 14.23.28105),似乎没有这样的定义,那么这是怎么发生的呢?

现在,我发现上述情况也发生在Windows上的Clang 9上。

最佳答案

在您的示例中,从cstdlib找到size_t。

由于定义了c++ 17 size_t:

in header <cstddef>
in header <cstdio>
in header <cstdlib>
in header <cstring>
in header <ctime>
in header <cuchar>

它可能在没有vs或其他编译器的标题的情况下工作。有时可以通过其他基本头文件(如I / O或什至使用std)找到它。但是包含 header 是安全/更好的。

关于c++ - 为什么 `size_t`在Windows 2019的VS 2019和Clang 9中没有标题的情况下可以工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60369492/

相关文章:

c - 如何正确地一起使用 size_t 和其他整数类型?

c - 理解 size_t 类型和 sizeof 运算符的问题

c++ - 我如何在初始化列表中的构造函数之后初始化变量/对象?

c++ - 如何将已经写入xml文件的OpenCV Mat转换回图像?

c - size_t 0x1<<31 比 size_t 0x1<<30 大很多

objective-c - 何时使用 size_t 与 uint32_t?

c++ - 按下触摸屏会触发mousePressEvent,如何判断是鼠标点击还是触摸屏点击?

c++ - g++中的优化级别-O3危险吗?

c++ - 无法从 .dat 文件读取数据(从 Simulink 创建的 VS2012 C++ 项目)