cost 229 ms
C++ ODR 违规和共享库 - C++ ODR violation and shared libraries

假设我们有一个静态链接到 MyLib1.0 的程序。 还有一个与 MyLib1.1 链接的共享库。 现在如果程序加载这个共享库会发生什么? 我的假设是在运行时我们将对相同的符号有多个不同的定义。 以下两种情况是否都违反了 ODR? 共享库导出所有符号,包括MyLib1.1的符号共享库隐藏了MyLib ...

某种类型的 operator< 可以在编译单元之间有不同的定义吗? - can `operator<` of some type have different definitions between compilation units?

我想为 pod 结构X创建一个std::set&lt;X&gt; 。 我尝试提供免费的operator&lt; 。 我不希望此运算符具有全局效果(在此编译单元之外),因此我将operator&lt;设置为static 。 (链接到代码) 这编译得很好。 但是,如果我将operator&lt;移动 ...

cppcheck:覆盖时违反了一个定义规则 - cppcheck: one definition rule is violated when overriding

在以下代码中(这是基于更复杂代码的最小示例),基本 class 定义了 class 的本地结构。 派生的 class 会覆盖此定义,但也使用基础 class 中的定义。 使用 gcc 和-Wall -Wextra编译不会发出任何警告。 代码的 output 符合预期 但是,当使用 cppcheck ...

基于范围的 for 在数组 ODR 上循环使用该数组吗? - Does a range based for loop over an array ODR-use the array?

当使用基于范围的 for 循环迭代数组时,不绑定对每个元素的引用,这是否构成数组的 ODR 使用? 例子: foo::xs的定义是否必要? 虽然这段代码及其变体看起来运行良好,但这并不意味着定义从来没有必要。 缺少对 ODR 使用的变量的定义很少会产生诊断,因为该变量可以在另一个翻译单元中 ...

由于 if constexpr,内联模板化 function 具有不同的行为是否违反 ODR? - Is it an ODR violation to have an inline templated function have different behavior due to if constexpr?

可以检测类型是否完整https://devblogs.microsoft.com/oldnewthing/20190710-00/?p=102678 如果一个类型是完整的,我有理由想要提供一个不同的(可内联的)实现。 模板化的 function 在基于 function 中的if constexp ...

在未使用的默认成员初始值设定项中使用仍然是 ODR 使用吗? - Is use in an unused default member initializer still an odr-use?

在默认成员初始值设定项中使用是否仍然是 odr-use,即使默认成员初始值设定项未被任何构造函数使用? 例如,这个程序是否格式错误,因为g&lt;A&gt;是 odr-used 并且因此它的定义被隐式实例化? MSVC 认为不。 Clang、GCC 和 ICC 认为是的。 https://g ...

在这种情况下如何防止 ODR 违规? - How to prevent ODR violations in this case?

免责声明:这个问题是关于防止意外的命名冲突,并确保以下代码无法编译/链接。 [编辑] 实际上,我很高兴有一些东西可以阻止它编译/链接,或者一些可以解决这个问题的东西,比如匿名名称空间。 但是匿名命名空间不应该在标头内 go 。 这里发生的是 ctor S::S 有两个内联定义,因此允许 link ...

const 数据成员可以在翻译单元之间具有不同的值吗? - Can const data members have different values between translation units?

我想知道是否允许使用 const 成员的不同值多次声明相同的 class ,或者这是否会违反 ODR? 考虑这个带有两个独立翻译单元的示例,它们将链接到某个libx库中: 此外,如果这不合法,是否将x声明为const是否会有所不同? ...

“找到一个或多个多重定义的符号”。 Static 和朋友 function - "One or more multiply defined symbols found". Static and friend function

我正在尝试使用interface类,并且我有以下class结构: IBase.h: IQuackable.h: 野鸭鸭.h: 野鸭鸭.cpp: 我还创建了 class RedHeadDuck.h 和.cpp,其声明和定义与 MallardDuck 相同。 最后,主要的 class 代码: 在这 ...

是否可以通过使用隐藏可见性来避免 ODR 违规? - Can ODR violation be avoided by using hidden visibility?

因此,例如,我的一个项目中有一个稍微复杂的库依赖案例: Rust 默认会优先使用 static 链接。 可执行文件 A 也被构建为静态链接 lib(std)c++。 因此,据我了解,A 和 B 中都会有两个 STL 实现副本。这正是https://developer.ZC31B32364CE19 ...

在 header 文件中声明构造函数 '= default' 是否会破坏 ODR - Does declaring a constructor '= default' in a header file break the ODR

如果我将析构函数(或任何自动生成的构造函数)定义为默认值,如下所示: 然后将其包含在几个翻译单元中,这会破坏 ODR 吗? 有人可以引导我完成ODR页面上的步骤吗? 因为我很难理解编译器生成的析构函数是否会内联或其他一些效果以防止它破坏 ODR。 ...

将 C 识别的指针定义为内部 C++ class - typedefing a pointer recognized by C to an inner C++ class

我有一个 class 我想在 C 和 C++ 之间共享,其中 Z0D61F8370CAD14D61F8370CAD14D412F80B84 只能作为指针获取。 然而,因为它是一个内部 class 它不能被前向声明。 相反,这是我们当前代码在一个常见的 header 文件中所做的: 这看起来违反了单 ...

C++ 中如何使用内联说明符来保留一个定义规则? - How is the inline specifier used in C++ to preserve the one definition rule?

我一直在试图弄清楚inline说明符如何保留 ODR。 到目前为止,我写的所有内容似乎都没有必要,因为包含保护确保定义只包含一次。 假设我在名为constants.h的文件中有以下定义 根据我对与 ODR 相关的inline理解,编写inline说明符是为了确保这些常量的定义仅在多个翻译单元中 ...

这个 gdb 核心是否因违反 ODR(一个定义规则)而发生? - Is this gdb core occured by violation of ODR(One Definition Rule)?

我正在使用代码在我的服务器应用程序中包含rapidjson标头。 我编译的时候,没问题。 但是当应用程序中的其他一些库部分正在运行时,结果是 gdb 核心文件已经死了。 #0 0x00007f36c614e922 in rapidjson::MemoryPoolAllocator&lt;rapid ...

混合使用 UNICODE 和非 UNICODE 翻译单元是否安全? - Is it safe to mix UNICODE and non-UNICODE translation units?

我正在集成一个需要定义_UNICODE和UNICODE的库; 我现在不能在我的项目中全局设置这些定义,所以我想知道我是否可以安全地只用这些定义构建库代码。 我担心 ODR 违规,但据我了解,这些定义仅影响 Windows 和 C 运行时标头中的宏定义,因此我预计不会出现 ODR 违规(只要我自己在 ...

VS2019 上的 C++ 代码生成错误 LNK2005 和 LNK1169 - C++ code generating errors LNK2005 & LNK1169 on VS2019

以下代码在 Visual Studio 2019 上生成错误 LNK2005 和 LNK1169。 我通过学习 Udemy 的课程达到了这一点,讲师似乎对此没有任何问题。 类似的问题似乎与使用全局变量有关,在 header 文件中定义函数,而不是使用#ifndef守卫......但据我所知,情况似 ...


 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM