Khi tôi cố gắng biên dịch mã sau, tôi nhận được lỗi liên kết: Undefined symbols for architecture x86_64: "Foo()", referenced from: _main in main.o
sử dụng LLVM 4.2.Ký hiệu không xác định cho hàm constexpr
Hành vi này chỉ xảy ra khi hàm được đánh dấu constexpr
. Chương trình biên dịch và liên kết chính xác khi chức năng được đánh dấu const
. Tại sao việc khai báo hàm constexpr
gây ra lỗi liên kết?
(Tôi nhận ra rằng văn bản cho chức năng theo cách này không cung cấp cho các lợi ích của việc biên dịch-thời gian tính toán;. Tại thời điểm này tôi tò mò tại sao chức năng thất bại trong việc liên kết)
main.cpp
#include <iostream>
#include "test.hpp"
int main()
{
int bar = Foo();
std::cout << bar << std::endl;
return 0;
}
test.hpp
constexpr int Foo();
test.cpp
#include "test.hpp"
constexpr int Foo()
{
return 42;
}
Xem http://stackoverflow.com/questions/14391272/does-constexpr-imply-inline –