次のコードをコンパイルしようとすると、リンカーエラーが発生します。Undefined symbols for architecture x86_64: "Foo()", referenced from: _main in main.o
LLVM 4.2を使用しています。constexpr関数の未定義シンボル
この現象は、この機能がconstexpr
とマークされている場合にのみ発生します。機能がconst
とマークされると、プログラムは正しくコンパイルされ、リンクされます。関数を宣言すると、リンカエラーが発生するのはなぜですか?constexpr
(私は関数を作成すると、この方法は、コンパイル時計算の利益を与えないことを認識し、関数がリンクに失敗する理由は、この時点で私は好奇心旺盛です。)
main.cppに
#include <iostream>
#include "test.hpp"
int main()
{
int bar = Foo();
std::cout << bar << std::endl;
return 0;
}
test.hpp
constexpr int Foo();
constexpr
関数が暗黙のうちにinline
しているためであるTEST.CPP
#include "test.hpp"
constexpr int Foo()
{
return 42;
}
がhttp://stackoverflow.com/questions/14391272/does-constexpr-imply-inline –