草庐IT

inline-namespaces

全部标签

c++ - header 中的 `const` 和 `constexpr` 变量是否应为 `inline` 以防止违反 ODR?

考虑以下header并假设它在多个TU中使用:staticintx=0;structA{A(){++x;printf("%d\n",x);}};作为thisquestion解释说,这是违反ODR的,因此是UB。现在,thereisnoODRviolation如果我们的inline函数引用了一个非volatileconst对象并且我们不在该函数中使用它(加上其他规定),所以这在标题中仍然可以正常工作:constexprintx=1;structA{A(){printf("%d\n",x);}};但如果我们碰巧使用它,我们又回到了与UB的第一方:constexprintx=1;struct

c++ - header 中的 `const` 和 `constexpr` 变量是否应为 `inline` 以防止违反 ODR?

考虑以下header并假设它在多个TU中使用:staticintx=0;structA{A(){++x;printf("%d\n",x);}};作为thisquestion解释说,这是违反ODR的,因此是UB。现在,thereisnoODRviolation如果我们的inline函数引用了一个非volatileconst对象并且我们不在该函数中使用它(加上其他规定),所以这在标题中仍然可以正常工作:constexprintx=1;structA{A(){printf("%d\n",x);}};但如果我们碰巧使用它,我们又回到了与UB的第一方:constexprintx=1;struct

c++ - 最佳实践 : using namespace or reopen namespace?

就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter寻求指导。关闭10年前.假设我在头文件中声明了一个函数(或类,没关系),它是命名空间foo的一部分:namespacefoo{voidbar();…}很长一段时间以来,当我在cpp文件中定义函数时,我一直在重新打开命名空间:namespacefoo{voidbar(){doSomething();…}}那是因为我是通过这种方式学习的,并且在我正在从事的项目中使用了它。直到最

c++ - 最佳实践 : using namespace or reopen namespace?

就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter寻求指导。关闭10年前.假设我在头文件中声明了一个函数(或类,没关系),它是命名空间foo的一部分:namespacefoo{voidbar();…}很长一段时间以来,当我在cpp文件中定义函数时,我一直在重新打开命名空间:namespacefoo{voidbar(){doSomething();…}}那是因为我是通过这种方式学习的,并且在我正在从事的项目中使用了它。直到最

c++ - LLVM 编译器 2.0 : Warning with "using namespace std;"

在使用LLVM2.0的Xcode中,当我将行usingnamespacestd;放入我的C++代码中时,我收到以下警告:SemanticIssueUsingdirectivereferstoimplicitly-definednamespace'std'有没有办法解决这个问题?为什么会发出这样的警告? 最佳答案 您是否包含任何标准头文件?否则编译器不知道namespacestd.请发布更多代码以澄清。 关于c++-LLVM编译器2.0:Warningwith"usingnamespace

c++ - LLVM 编译器 2.0 : Warning with "using namespace std;"

在使用LLVM2.0的Xcode中,当我将行usingnamespacestd;放入我的C++代码中时,我收到以下警告:SemanticIssueUsingdirectivereferstoimplicitly-definednamespace'std'有没有办法解决这个问题?为什么会发出这样的警告? 最佳答案 您是否包含任何标准头文件?否则编译器不知道namespacestd.请发布更多代码以澄清。 关于c++-LLVM编译器2.0:Warningwith"usingnamespace

c++ - 内联命名空间中对命名空间的不明确引用

假设以下代码:namespacetest{namespacedetail{}inlinenamespacev1{namespacedetail{voidfoo(){}}}}intmain(){test::detail::foo();}Aswecansee,这段代码用Clang编译;不是withGCC,但是-GCC提示对namespacedetail的引用不明确:main.cpp:20:11:error:referenceto'detail'isambiguoustest::detail::foo();^main.cpp:4:5:note:candidatesare:namespacet

c++ - 内联命名空间中对命名空间的不明确引用

假设以下代码:namespacetest{namespacedetail{}inlinenamespacev1{namespacedetail{voidfoo(){}}}}intmain(){test::detail::foo();}Aswecansee,这段代码用Clang编译;不是withGCC,但是-GCC提示对namespacedetail的引用不明确:main.cpp:20:11:error:referenceto'detail'isambiguoustest::detail::foo();^main.cpp:4:5:note:candidatesare:namespacet

C++ -fvisibility=hidden -fvisibility-inlines-hidden

我对C++可见性属性有疑问。我已阅读http://gcc.gnu.org/wiki/Visibility但我不太明白它是如何工作的。我想在我拥有的一些共享库中隐藏可见性。我相信这意味着符号被隐藏了?那么您打算如何链接共享库?有什么特别的方法吗?如果我链接它通常如何链接它不起作用。谁能帮帮我。 最佳答案 -fvisibility=hidden默认隐藏所有符号。然后您要做的就是选择您希望链接到您的库的用户可以看到哪些功能,并通过使用可见属性标记它们使其可见。例如void__attribute__((visibility("default

C++ -fvisibility=hidden -fvisibility-inlines-hidden

我对C++可见性属性有疑问。我已阅读http://gcc.gnu.org/wiki/Visibility但我不太明白它是如何工作的。我想在我拥有的一些共享库中隐藏可见性。我相信这意味着符号被隐藏了?那么您打算如何链接共享库?有什么特别的方法吗?如果我链接它通常如何链接它不起作用。谁能帮帮我。 最佳答案 -fvisibility=hidden默认隐藏所有符号。然后您要做的就是选择您希望链接到您的库的用户可以看到哪些功能,并通过使用可见属性标记它们使其可见。例如void__attribute__((visibility("default