请考虑以下代码:
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即内部联系.这意味着每个翻译单元都有自己的副本.
由于上面的内联函数依赖于这些常量,这些函数中的哪一个(如果有的话)是正确的?
这个问题在之前的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)
它是编译器错误还是语言限制/功能?