相关疑难解决方法(0)

头文件中的内联函数是否可以使用具有内部链接的常量?

请考虑以下代码:

const int a = 0;
const std::string b = "hi";

inline void f_a1()
{
    std::cout << a;
}

inline void f_b1()
{
    std::cout << b;
}

inline void f_a2()
{
    std::cout << &a;
}

inline void f_b2()
{
    std::cout << &b;
}
Run Code Online (Sandbox Code Playgroud)

假设此代码存在于将包含在多个翻译单元中的头文件中.

我对内联函数的理解是它们在每个翻译单元中必须完全相同.

我对上面使用的常数的理解是,它们是隐含的,static即内部联系.这意味着每个翻译单元都有自己的副本.

由于上面的内联函数依赖于这些常量,这些函数中的哪一个(如果有的话)是正确的?

c++ const inline one-definition-rule linkage

6
推荐指数
1
解决办法
198
查看次数

在C++ 03/C++ 11中链接由于指针数组的常量引起的错误

这个问题在之前的g ++中是可重现的-std=c++14.由于const以下代码中突出显示,会生成链接错误.如果const移除RHS,它就会消失.

/* main.cpp */
const char* const arr[2] = {"Hello", "World"};
//          ^^^^^
int main () {}
Run Code Online (Sandbox Code Playgroud)

/* foo.cpp */
extern const char* const arr[2];
//                 ^^^^^
const char* foo () { return arr[0]; }
Run Code Online (Sandbox Code Playgroud)

在编译:时g++ [-std=c++11] main.cpp foo.cpp,它会给出以下链接错误:

In function `foo()': undefined reference to `arr'  
Run Code Online (Sandbox Code Playgroud)

它是编译器错误还是语言限制/功能?

c++ const linker-errors compiler-bug c++11

5
推荐指数
1
解决办法
106
查看次数