20得票2回答
C++标准:命名空间作用域下的constexpr变量是否具有内部链接性?

假设我们有一个头文件foo.h,其中包含以下内容:#ifndef FOO_H_ #define FOO_H_ namespace foo { constexpr std::string_view kSomeString = "blah"; } #endif // FOO_H_ foo::...

20得票3回答
在头文件中使用静态全局变量有意义吗?

静态变量具有文件作用域。假设我有以下两个文件: file1.h file1.cpp file2.h file2.cpp 我在这两个头文件中声明了静态变量static int Var1。同时,file1.h和file2.h都被包含在main.cpp文件中。 我这样做是因为静态变量具有文...

19得票2回答
当非静态函数声明跟在静态函数声明后面时会发生什么?

以下代码可以编译通过:static int foo() { return 1; } int foo(); 但是,它是否总是可编译的?在这种情况下,行为是否被定义得很好?当非静态原型跟随静态声明时,这意味着什么?

19得票3回答
将main声明为extern "C"在C++中是否合法?

作为一名低级程序员,我经常与可执行文件的模块启动代码一起工作,因此我非常了解像"crt0"这样的代码是如何工作的。在编写C++代码时,我通常将main声明为extern "C",以匹配C启动代码调用main的方式。因此,我通常为main(和wmain,如果特别针对Windows)使用此声明:e...

18得票2回答
为什么内联函数默认具有外部链接性?

标准规定,如果有一个声明 inline void foo(); 这意味着一个内联函数也可以具有内部链接,因为通过外部链接(即跨翻译单元)以任何方式使用该函数都会引发未定义行为(根据第3段),并且所有翻译单元中的内联函数内容都需要相同。是否存在向后兼容性或特定工具链原因来支持此规则? 注意:原文...

18得票3回答
外部、内部和无连接,或者为什么这不起作用?

根据C标准: 在构成整个程序的翻译单元和库的集合中,每个带有 外部链接 的特定标识符声明表示相同的对象或函数。在一个翻译单元内,每个带有 内部链接 的标识符声明表示相同的对象或函数。每个带有 无链接 的标识符声明表示唯一的实体。 在我的示例中,我们有三个不...

18得票3回答
内部链接和无链接的区别

请参考与此翻译单元相同的以下代码:static int global_var; // file scope in C and global namespace scope in C++ // internal linkage void f(void...

18得票1回答
在C++中使用extern "C"会失去什么?

我正在尝试用C ++开发一个动态库,以供使用IDL(交互式数据语言)编写的现有程序调用。我知道需要使用extern "C"来禁用名称修饰,以便IDL可以调用它所需的函数(其余的调用机制相当简单)。 然而,我总是不敢使用完全不了解的语言功能,所以我的问题是:通过恢复C链接,我失去了C++的哪些...

17得票3回答
未命名命名空间中嵌套的实体在常规命名空间中是否具有内部链接?

在C++中,将函数或变量放在未命名的命名空间中会使其链接变为内部链接,即与在文件级别上声明为static相同,但符合C++的习惯用法。 那么,在普通命名空间内部的未命名命名空间呢?它是否仍然保证内部链接? // foo.cpp void func1() { // external...

17得票4回答
通过extern "C"函数与C++对象进行接口交互

extern "C" 函数能否接受或返回 C++ 特有的数据类型,比如引用、成员指针或非 POD 类(按值传递)?我在 C++ 标准中没有找到任何禁止这样做的规定。从逻辑上讲,我希望标准有所提及,因为 C ABI 不一定适合传递这些类型。 我想使用 C 连接的原因与 C 编译器无关。该函数仅...