在函数内定义结构是否有任何"惩罚"?

Kir*_*rov 24 c c++ struct function

只是出于好奇..

正如标题所说:在函数内定义结构是否存在任何"惩罚"?(如表现,记忆,糟糕的编程习惯等)


PS我知道,在函数内定义(非模板)仿函数是一种常见的做法,但仍然......)

ltj*_*jax 20

在C++ 11中,没有 - 没有惩罚.我甚至认为这是一个非常好的风格,不会污染任何"更明显"的范围与您的实现细节,当然,除非您想在其他地方重用该仿函数.但是,lambdas本质上是这个想法的浓缩形式,如果你只是使用struct作为functor ,通常应该是首选.对于所有类型的数据,这是完全正常的,但它通常与竞争std::pair,并std::tuple在这方面.

在C++ 03中,您不能使用这样的结构作为模板参数,因为这些参数需要具有外部链接(尽管Visual Studio允许您这样做).使用具有多态接口的这种结构仍然是有用的.


NPE*_*NPE 5

由于它纯粹是一个可见性问题,我无法想象会出现性能或内存损失的合理情况.