sizeof 运算符的返回类型是什么?

新手上路,请多包涵

sizeof 运算符的返回类型是什么? cppreference.com & msdn 说 sizeof 返回 size_t 。它真的返回 size_t 吗?我正在使用 VS2010 Professional,并针对 x64。

 int main()
{
    int size   = sizeof(int);     // No warning
    int length = strlen("Expo");  //warning C4267: 'initializing' : conversion from 'size_t' to 'int', possible loss of data
    return 0;
}

我有这个问题是因为第一行没有发出任何警告,而第二行没有发出任何警告。即使我将其更改为 char 大小,我也不会收到任何警告。

原文由 Coder777 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 550
1 个回答

size_t 是一些实现定义的无符号整数类型的别名。在与 C 相对的 C++ 中,可以将 sizeof 运算符应用于 VLA 数组,但不会评估 sizeof 运算符的操作数(在运行时)。它是一个常数。如果 sizeof 运算符的值可以适合 int 类型,则编译器不会发出警告。在第二个示例中,std::strlen 在运行时被评估,因此它的结果不适合 int,因此编译器会发出警告。您可以用自己的 constexpr 函数(一些递归函数)替换 std:;strlen 。在这种情况下,如果结果可以适合 int 我认为编译器不会发出警告。

原文由 Vlad from Moscow 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题