C++ 内联命名空间是否隐式内联其函数?
C++ Does inlining a namespace implicitly inline its functions?
如果我有 header 并且:
namespace outer {
inline namespace inner {
void func();
}
}
然后我无法在单独的 .cpp 文件中定义 func()
,因为这会给我一个编译错误:
- undefined reference to 'outer::inner::func()'
就像我将函数声明为内联一样。这样对吗?这是否意味着内联命名空间会隐式内联其函数。我试着查看 https://en.cppreference.com/w/cpp/language/namespace 但找不到任何明确说明的地方。
编辑 2:
无视,先前的编辑。我未能正确配置我的 cmake 文件,因此无法编译代码。请参阅答案以获取原始问题的答案。谢谢大家!
编辑:
这是一个我无法编译的例子:
Test.h
namespace Core {
inline namespace TestNameSpace {
void write();
}
}
Test.cpp
#include <iostream>
#include "Test.h"
void Core::write() {
std::cout << "BAJS\n";
}
main.cpp
#include "Test.h"
int main() {
Core::write();
return 0;
}
我应该注意,#include "Test.h"
在我的 IDE 文件中是灰色的 Test.cpp 文件。
简单的回答是:没有。您绝对可以在单独的 cpp 文件中定义函数。 inline
在命名空间上基本上可以使您不需要指定命名空间名称。例如,您可以 outer::func()
而不是 outer::inner::func()
参见[namespace.def]/5-7
。对于必须在哪里定义函数没有任何限制,并且它隐式地内联它们。
您遇到的错误与您的编译方式有关。您可能忘记编译 .cpp 文件,或者至少 link 将其编译到调用它的位置。
如果我有 header 并且:
namespace outer {
inline namespace inner {
void func();
}
}
然后我无法在单独的 .cpp 文件中定义 func()
,因为这会给我一个编译错误:
- undefined reference to 'outer::inner::func()'
就像我将函数声明为内联一样。这样对吗?这是否意味着内联命名空间会隐式内联其函数。我试着查看 https://en.cppreference.com/w/cpp/language/namespace 但找不到任何明确说明的地方。
编辑 2: 无视,先前的编辑。我未能正确配置我的 cmake 文件,因此无法编译代码。请参阅答案以获取原始问题的答案。谢谢大家!
编辑:
这是一个我无法编译的例子:
Test.h
namespace Core {
inline namespace TestNameSpace {
void write();
}
}
Test.cpp
#include <iostream>
#include "Test.h"
void Core::write() {
std::cout << "BAJS\n";
}
main.cpp
#include "Test.h"
int main() {
Core::write();
return 0;
}
我应该注意,#include "Test.h"
在我的 IDE 文件中是灰色的 Test.cpp 文件。
简单的回答是:没有。您绝对可以在单独的 cpp 文件中定义函数。 inline
在命名空间上基本上可以使您不需要指定命名空间名称。例如,您可以 outer::func()
而不是 outer::inner::func()
参见[namespace.def]/5-7
。对于必须在哪里定义函数没有任何限制,并且它隐式地内联它们。
您遇到的错误与您的编译方式有关。您可能忘记编译 .cpp 文件,或者至少 link 将其编译到调用它的位置。