Bazı şeylerin nasıl çalıştığına dair biraz daha fazla bilgi edinmek için C++ 11 kullanarak bazı oyuncak kodları ile oynuyorum.constexpr işlev parametrelerini şablon argümanları olarak
template <int x, int y>
class add {
public:
static constexpr int ret = x + y;
};
constexpr int addFunc(const int x, const int y) {
return add<x,y>::ret;
}
int main() {
const int x = 1;
const int y = 2;
cout << add<x,y>::ret << endl; // Works
cout << addFunc(1,2) << endl; // Compiler error
return 0;
}
Ben GCC 4.8.1 kullanıyorum ve çıkışı:
'x' türü için şablon argüman sabit bir ifade değildir 'int bu sırasında aşağı basitleştiren aşağıdaki sorun rastladı '
'y int 'tam olarak add::ret
hesaplamak çalışıyorum iki şekilde arasındaki fark nedir
' türü için şablon argüman sabit bir ifade değildir?' Bu değerlerin ikisi de derleme zamanında mevcut olmalıdır.
'constexpr' işlevlerinin çalışma zamanında çalıştırılabilmesi gerekir. – chris
Şey ... evet. Öyleyse neden bu özellikle derleme zamanında değerlendirilemiyor? – Danny
Detaylandırmak için: 'constexpr' işlevlerinin çalışma zamanında çalıştırılabilmesi gerekir ve 'constexpr' işleviniz derleme zamanı sabiti olmayan herhangi bir değerle çağrıldığında başarısız olur, dolayısıyla' constexpr' işleviniz geçerli değildir . Aradığın şey, constexpr'in sağladığı şey değil, ve C++ başka bir formda da bir şey değil. En yakın olanı 'addFunc'' int x' ve 'int'' şablon parametreleriyle bir şablon işlevi yapmaktır. – hvd