谁能解释一下当前 C++0x 标准草案的这一段吗?
谁能解释一下 ISO N3242 §3.2 第 4 点中的这一说法
与 ISO 标准 2003 相比,n3242 的添加部分:
4
如果类的使用方式要求类类型完整,则翻译单元中只需要该类的一个定义。类类型
T
必须是完整的,如果:
- 声明了
T
类型的非静态类数据成员 (9.2),或者T
用作 new 表达式中的对象类型或数组元素类型- 类型
T
是alignof表达式(5.3.6)的主题,或者- 异常声明具有类型
T
、对T
的引用或指向T
的指针
任何人都可以解释当前 C++0x 标准草案的这一段吗?
在这些声明中添加此内容的实际含义是什么?
任何人都可以借助示例/程序来解释这一点吗?
Can anyone explain this statement from ISO N3242 §3.2, 4th point
The added part of n3242 when compare to ISO Standard 2003 :
4
Exactly one definition of a class is required in a translation unit if the class is used in a way that requires theclass type to be complete.A class type
T
must be complete if:
- a non-static class data member of type
T
is declared (9.2), orT
is used as the object type or array element type in a new-expression- the type
T
is the subject of an alignof expression (5.3.6), or- an exception-declaration has type
T
, reference toT
, or pointer toT
Can anyone explain this paragraph of the current C++0x standard draft?
What is the actual meaning of adding this in these statement?
Can any one explain this with the help of an example/program?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
直接来自维基百科:
多个定义
静态常量数据成员的定义
Straight from Wikipedia:
More than one definition
Definitions of static const data members
它的意思是,如果您以需要定义的方式使用类类型(并且他们明确列出了使用类的方法),则必须提供此类类的一个定义。
如果您不提供定义,则会出现错误。如果您在一个翻译单元中提供多个内容,则会出现错误。如果您在多个翻译单元中提供多个定义,则这是未定义的行为。
All it's saying is that if you make use of a class type (and they're explicitly listing ways to use a class) in a way that requires a definition, you must provide exactly one definition of such class.
If you don't provide a definition it's an error. If you provide more than one in a translation unit it's an error. If you provide more than one definition across multiple translation units it's undefined behavior.