Hãy xem xét hàm nội tuyến sau:
// Inline specifier version
#include<iostream>
#include<cstdlib>
inline int f(const int x);
inline int f(const int x)
{
return 2*x;
}
int main(int argc, char* argv[])
{
return f(std::atoi(argv[1]));
}
và phiên bản tương đương của constexpr:
// Constexpr specifier version
#include<iostream>
#include<cstdlib>
constexpr int f(const int x);
constexpr int f(const int x)
{
return 2*x;
}
int main(int argc, char* argv[])
{
return f(std::atoi(argv[1]));
}
Câu hỏi của tôi là: liệu trình constexprxác định có ngụ ý trình inlinexác định theo nghĩa là nếu một đối số không phải là hằng số được truyền cho một constexprhàm, trình biên dịch sẽ cố gắng thực inlinehiện hàm như thể trình inlinexác định được đưa vào khai báo của nó không?
Tiêu chuẩn C ++ 11 có đảm bảo điều đó không?
inlinecụ xác định không còn liên quan gì đến nội tuyến nữa
inlinecó liên quan trực tiếp đến nội tuyến. Vì vậy, không, các constexprspecifier không bao hàm các inlinespecifier trong ý nghĩa đó, như là cảm giác không tồn tại.
inlinexác định làm. (Hoặc có thể tôi đã hiểu sai cách diễn đạt của bạn.)