繁体   English   中英

c ++ 17内联+ thread_local vs thread_local

[英]c++17 inline + thread_local vs thread_local

我想知道以下两个声明之间的区别是什么,如果两者都写在一个头文件中:

inline thread_local MyClass obj1;  // inline with thread_local
thread_local MyClass obj2;         // no inline

如 C++17 中所述,向变量添加内联会强制所有翻译单元看到该变量的相同地址。 这是否意味着obj2可以在不同的翻译单元中获得不同的地址值? 强调我们应该使用obj1而不是obj2什么?

如果在多个编译单元中包含此头文件,您将获得obj2多个定义。 但是obj1会正常工作,因为链接器将保证只存在一个定义,并且所有编译单元将使用相同的定义(因此使用相同的地址)。

因此,您的代码应该为obj2使用extern并在单个编译单元中定义它。 但是inline已经为obj1做到了这一点。

这是否意味着obj2可以在不同的翻译单元中获得不同的地址值?

在那种特殊情况下,不,因为它不会编译。 但是,如果将static添加到obj2 ,则每个编译单元将获得一个地址。

强调我们应该使用obj1而不是obj2什么?

你永远不应该像这样使用obj2obj1是正确的方法。 如果你想避免inline ,你可以对obj2使用extern

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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