内联结构声明
Posted
技术标签:
【中文标题】内联结构声明【英文标题】:Inline struct declaration 【发布时间】:2011-10-11 09:26:01 【问题描述】:我有兴趣注意到 C++(特别是 VSVC++ 2008)允许我在方法中声明一个内联结构。 例如:
MyClass::method()
struct test int x;;
test t = 99;
我的问题是,这个声明在内部是如何工作的,特别是它是否会对性能产生负面影响?
【问题讨论】:
Usage of local class in C++ function的可能重复 本地类。 possible duplicate 了解更多信息。 【参考方案1】:这个声明在内部是如何工作的?
与命名空间范围内的声明完全一样,只是名称仅在声明它的块(在本例中为函数体)的范围内可见。更新:正如@Nawaz 指出的那样,有一个或两个额外的限制适用于本地类:它们不能有静态数据成员,并且(在 C++03 中,但不是 C++11 中)它们不能用作模板类型参数。
它对性能有任何负面影响吗?
不,除了它的范围(只影响代码是否编译)之外,它与任何其他类定义相同。
【讨论】:
不完全正确的答案。本地类和命名空间类之间有很多区别。查看可能的重复项:***.com/questions/5714616/… @Nawaz:谢谢,我确实稍微简化了一点,我实际上并不知道他们不能拥有静态数据成员。我认为现在的答案更正确。【参考方案2】:在函数范围内或外部定义类型的主要区别在于范围。也就是说,如果它是在函数内部定义的,它将无法在函数外部访问。
虽然还有其他区别(至少在 C++03 中,我没有重新检查 C++11),你不能在本地类中拥有静态成员或模板成员。您也不能将该本地类用作模板的参数(此限制已在 C++11 中删除),IIRC 这是因为本地类具有内部链接(而不是命名空间级别类的外部链接),并且需要模板参数是外部链接。
【讨论】:
以上是关于内联结构声明的主要内容,如果未能解决你的问题,请参考以下文章
C++ 内联函数:这样声明,这样定义,还是两者兼而有之?为啥?