gpt4 book ai didi

c++ - 为什么 MSVC _count_of 实现将 0 添加到 sizeof 的结果中?

转载 作者:行者123 更新时间:2023-12-02 01:32:23 24 4
gpt4 key购买 nike

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

最佳答案

添加+ 0是为了防止潜在出现Most Vexing Parse !如果没有它,在某些情况下,像 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;
}

关于c++ - 为什么 MSVC _count_of 实现将 0 添加到 sizeof 的结果中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59394312/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com