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

时间:2012-06-11 12:19:34

标签: c++ c function struct

出于好奇......

正如标题所说:在函数内部定义结构是否存在“惩罚”?(如性能,内存,糟糕的编程习惯等)< / p>


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

4 个答案:

答案 0 :(得分:20)

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

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

答案 1 :(得分:5)

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

答案 2 :(得分:0)

如果您正在使用C ++ 03,那么从技术上讲,您不能使用本地定义的结构作为模板参数,但某些编译器(即MSVC)允许它。

答案 3 :(得分:0)

我知道你问过性能,但我想知道另一个问题。你要求C和C ++还是其中一种语言?我猜想你想在函数中定义一个结构以达到范围或隐藏结构。

对于C,您可以通过在单独的模块中定义和声明结构并使其静态来隐藏事物。然后,您可以提供访问功能,就像您对C ++类的成员一样。您可以在.h文件中包含需要访问结构的模块的函数声明。

如果这是针对C ++的,那么创建一个类并使结构保持私有或受到保护以及写入时,相应的get / set / manipulate方法将处理其余的事情。

如果您修改了原始帖子并扩展了原因,那么您就提出了一个很好的问题。