只是出于好奇..。
正如标题所说:在函数中定义结构有什么“惩罚”吗?(如性能、内存、糟糕的编程实践等)
附注:我知道,在函数中定义(非模板)函数是一种常见的做法,但仍然..)
发布于 2012-06-11 20:24:29
在C++11中,没有--没有惩罚。我甚至认为这是一种非常好的风格,不用你的实现细节污染任何“更明显”的作用域,当然,除非你想在其他地方重用这个函数器。然而,lambdas本质上是这种思想的一种压缩形式,如果您只是将结构用作函数器,那么通常应该是的首选。对于所有类型的数据,它都是完美的,尽管它通常在这方面与std::pair
和std::tuple
竞争。
在C++03中,您不能将这样的结构用作模板参数,因为这些参数需要有外部链接(不过,Visual Studio无论如何都允许您这样做)。将这样的结构与多态接口一起使用仍然很有用。
发布于 2012-06-11 20:21:58
由于这纯粹是一个可见性问题,我无法想象会有性能或内存损失的合理方案。
发布于 2012-06-11 20:24:32
如果你使用的是C++03,那么从技术上讲,你不能使用本地定义的结构作为模板参数,但一些编译器(即MSVC)允许这样做。
https://stackoverflow.com/questions/10979984
复制相似问题