one-definition-rule相关内容

如何在标头中使用未命名的命名空间会导致ODR违规?

在“Google C ++样式指南”中,命名空间部分“ 我理解为什么要使用未命名的命名空间在头文件中容易导致违反C ++ One Definition Rule(ODR)在实施文件中使用未命名的命名空间可能会导致ODR违规,但不会影响标题中的使用方式。 原因是如果你真的在匿名 命名空间中使用任何东西,你有未定义的行为风险。例如: 命名空间{ double const pi = 3 ..
发布时间:2016-10-25 13:34:13 C/C++开发

如何在标头中使用未命名的命名空间会导致ODR违规?

在“Google C ++样式指南”中,命名空间部分“ 我理解为什么要使用未命名的命名空间在头文件中容易导致违反C ++ One Definition Rule(ODR)在实施文件中使用未命名的命名空间可能会导致ODR违规,但不会影响标题中的使用方式。 原因是如果你真的在匿名 命名空间中使用任何东西,你有未定义的行为风险。例如: 命名空间{ double const pi = 3 ..
发布时间:2016-10-24 17:23:17 C/C++开发

如果不是纯的,使用虚拟成员函数?

C ++ 03 3.2.2 ...如果对象或非重载函数的名称出现在潜在求值表达。如果它不是纯的,则使用虚拟成员函数... 然后在 我们有: 每个程序都应该包含在该程序中使用的每个非内联函数或对象的一个​​定义;无需诊断。定义可以在程序中显式显示,它可以在标准或用户定义的库中找到,或者(在适当的时候)被隐式定义(见12.1,12.4和12.8)。 在使用它的每个翻译单元中都必须定义一个内联函 ..
发布时间:2016-10-23 12:13:25 C/C++开发

什么时候是在C ++ 14中使用的变量odr?

C ++ 14草案(N3936)在§3.2/ 3中规定: 一个变量x, - 评估表达式ex是odr使用,除非对x应用lvalue-to-rvalue转换(4.1)产生不调用任何非平凡函数的常量表达式(5.19),并且如果x是对象,则ex是元素表达式e的潜在结果集合,其中左值到右值转换(4.1)应用于e,或e是丢弃值表达式(条款5)。 这对我没有任何意义:如果表达式 e 是一个舍弃值表达 ..
发布时间:2016-10-22 18:08:13 C/C++开发

h关键字和内部链接

另一个 static 问题。 我已阅读以下内容: 什么是静态变量? 文件范围和静态浮动 http://msdn.microsoft.com/zh-CN/library/s1sb61xd.aspx 我仍然无法理解以下行为: 我有一个 h 文件: // StaticTest.h #include static int counter = 0; ..
发布时间:2016-10-17 09:37:20 C/C++开发

在c ++中的一个定义规则

根据c ++标准: 无翻译单元应包含任何 变量的定义,类类型,枚举类型或模板。 // - translation_unit.cpp-- // int a; void foo() { int a; //第二次捍卫a。 ODR失败。你能解释一下ODR是如何工作的吗? $ b 解决方案 这不会违反规则,因为你定义了两个不同的变量。它们具有相同的名称, ..
发布时间:2016-10-14 22:16:15 C/C++开发

“对ODR的使用”是什么意思,什么?

这只是在另一个问题。 显然,类模板中的成员函数只有在使用ODR时才被实例化。 有人可以解释一下究竟是什么意思。 维基百科的ODR文章没有提及“ ODR使用”。 但是标准定义为 一个变量,其名称显示为潜在计算表达式 是 odr-used ,除非它是一个满足 出现在常量表达式(5.19)和左值到右值 转换4.1)立即应用。 编辑:显然这是错误的部分,整个段落包含多个定义 ..
发布时间:2016-10-13 10:24:44 C/C++开发

我允许做一个静态,constexpr,类的初始化数据成员?

这可能是一个不寻常的问题,因为它要求更全面的解释给一个简短的回答另一个问题以及与之相关的C ++ 11标准的一些方面。 为了便于参考,我将在这里总结引用的问题。 OP定义了一个类: struct Account { static constexpr int period = 30; void foo(const int&){} void bar(){foo(period ..
发布时间:2016-10-13 10:02:10 C/C++开发

什么时候应该为函数/方法写关键字'inline'?

我应该何时在C ++中为函数/方法写关键字 inline ? ,一些相关问题: 我应该何时不将关键字'inline' /方法在C ++中? 编译器什么时候不知道何时创建函数/方法'inline' b $ b 如果应用程序多线程在为某个函数/方法写入'inline'时是否重要? 解决方案 哦,男人,我的宠物狗。 inline 比指令更像是 static 或 exte ..
发布时间:2016-10-11 19:49:53 C/C++开发

一个定义规则:能相应的实体有不同的名字?

我看了又看有关ODR在C ++标准的相关条款,但这个问题仍然向我敞开。标准说,内联函数的定义应出现在每个转换单元在其被使用,并且该定义应是其中几乎在一个页中记载的感相同。它说,该令牌序列必须是相同的。是否包括本地标识符名称? 在换句话说 请问下面的程序违反ODR?的(我试图与Visual Studio 2008测试它自己,得到0错误和0警告。但我猜这并不能证明什么,因为我再变为例,两种完全不同的 ..
发布时间:2016-08-23 11:15:24 C/C++开发

全局变量VS局部变量的重新声明

当我编译如下在code #包括LT&;&stdio.h中GT;诠释的main() { int类型的; INT A = 10; 的printf(“一为%d \\ n”,一); 返回0; } 我得到一个错误: test3.c:在函数'主': test3.c:6:5:错误:的“A”再次声明,没有联动 test3.c:5:5:注:“a”是这里previous声明 但是,如果我把这 ..
发布时间:2016-08-19 16:02:08 C/C++

为什么一个const全局变量的多个定义在C ++和不是在C允许?

全局变量的多重定义不C或C ++允许由于在一个定义规则。然而,在C ++中一个const全局变量可以在多个编译单元,没有错误定义。这是不一样的在C 为什么C ++允许这个而C不?为什么一个const全球的使用和行为从非const全局++中这种方式使用C和C相比有什么不同?什么是用C ++和C就在幕后发生的事情为const? 例如这是允许在C ++中,但错在C: // Foo.cpp中 co ..
发布时间:2016-08-18 13:55:41 C/C++开发