Kir*_*nko 6 c++ msvcrt visual-c++
我一直在阅读_countofMSVC 中宏的实现,发现了一个我无法解释的细节。它是通过一个__crt_countof宏实现的,该宏在 C++ 上扩展为(sizeof(*__countof_helper(_Array)) + 0)(这是标题中的相关代码)。为什么在+ 0那里?没有它会出什么问题?
将+ 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)