我不知道如何准确地对这个问题进行分类,所以我只是解释一下:
我正在搜索一些东西进行任务,我找到了我要找的东西,但在我查看的结果中,我发现了这个问题,我看到了很多我不了解/理解的东西: C++ Lambda capture private class member
//...
bool dump_dvars()
{
fstream& refvar{ output_file };
for_each(_array_start, _array_start + *_array_size,
[&refvar](const void* dvar) -> void
{
//work with output_file
});
return true;
}
private:
void** _array_start;
unsigned int* _array_size;
fstream output_file;
};
我不知道每种组合的具体名称是什么,但我想知道这些是什么:
关于虚空的;我的印象是应该避免使用无效指针(哦,嘿,双关语:P),因为我读到的内容就像对此的回复:List of pointers to different types of objects " 只使用空格作为最后且非常非常危险的解决方案。"
那么使用一个void类型的指针和一个void类型的指针指针,并访问类型" void"用lambda ??这甚至做了什么?它不是从中获取存储数据的变量,它访问了什么? 什么会" output_file"如果没有分配类型也不存储它(所以我猜它没有返回任何东西,并且它没有被返回所以它看起来不像一个函数),它没有括号,所以它不需要参数 - 它只是一个站在那里的标识符,它做了什么?如果你的int指针是无符号的,那有什么关系呢? Aren几乎都像基类一样(我知道int不是一个类)所以你可以用任何类型的int指向另一个整数?所有有符号和无符号整数在指向应该存储在存储器中的位置时具有相同的大小,即什么地址,它只是一个问题是什么"方向"或它将会/可以保持在那里的价值。
编辑:
尝试缩小问题范围:如何访问类型" void"工作,[& refvar]做什么?
答案 0 :(得分:0)
fstream& refvar{ output_file };
声明类型&#34的局部变量;引用fstream"并通过引用output_file
成员来初始化它。
[&refvar]
为lambda捕获refvar
。换句话说,lambda存储对refvar的引用,可以在lambda体内访问。
(const void* dvar)
lambda参数列表。可以使用const void指针(名为dvar
)来调用此lambda。
-> void
lambda返回类型(void)。请注意,此"尾随返回类型"版本也适用于普通功能,但在那里很少使用。
最后一个是明显的指针类型。
关于"你如何处理空指针":Dereferencing the void pointer in C++
答案 1 :(得分:0)
尽管Max Langhof的回答令人满意,但我想向自己解释这一点以供将来使用(也许其他人可能会发现这个解释更直接或更有用):
<强>数目:强>