为什么 MSVC _count_of 实现在 sizeof 的结果上加 0?

Kir*_*nko 6 c++ msvcrt visual-c++

我一直在阅读_countofMSVC 中宏的实现,发现了一个我无法解释的细节。它是通过一个__crt_countof宏实现的,该宏在 C++ 上扩展为(sizeof(*__countof_helper(_Array)) + 0)是标题中的相关代码)。为什么在+ 0那里?没有它会出什么问题?

Adr*_*ica 6

+ 0被添加到防止潜在的出现最令人头痛的解析!没有它,在某些情况下,like 表达式sizeof(*__countof_helper(_Array)) 可以被视为函数声明。

编辑:我目前正在尝试建立一个示例上下文(根据评论中的要求)。与此同时,这个大大简化的“等价物”(我实际遇到过的东西)可能会有所帮助:

#include <iostream>
#include <vector>

int main() {
    int num = 2;
//  std::vector<char> vec(size_t(num));     // Won't compile - Most Vexing Parse
    std::vector<char> vec(size_t(num) + 0); // Compiles - no longer a func decl!
    vec[0] = 'a';
    vec[1] = 'b';
    std::cout << vec[0] << ' ' << vec[1] << std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

  • `sizeof` 不是 `size_t`。这不是一个类型。我不明白它如何能触发 MVP。 (3认同)