2016-03-31 29 views
0
#include <stdio.h> 
#include <iostream> 

using namespace std; 

template <typename T, int N> 
int ReturnArraySize(T (&arg1)[N]) { 
    return N; 
} 

constexpr int ReturnTheSum(int arg1, int arg2) { 
    return arg1 + arg2; 
} 

int main(int argc, char **argv) 
{ 
    int arr1[20]; 
    int arr2[ReturnArraySize(arr1)]; 
    int arr3[ReturnTheSum(ReturnArraySize(arr1), ReturnArraySize(arr2))]; 

    return 0; 
} 

Ben Kodu derlemek, aşağıdaki hatayı alıyorum:derleme hatası kullanırken constexpr

/root/Documents/C++11_Fundamentals/ConstExprRelatedFunc/main.cpp:19:67: error: no matching function for call to ' ReturnArraySize(int [(<anonymous> + 1)]) '

+0

cevabı kabul düşünün @skverma bu hata benim sorunu – skverma

cevap

2

ReturnArraySize Çünkü bir constexpr fonksiyonu olarak işaretlenmemiş, arr2 bir VLA (variable-length array, bir GCC uzantısı haline gelir (C++ standardının bir parçası değil), derleme süresinde (yani, bir işlev şablonuyla çıkarılmış) boyutu için sorgulanamayan.

Sen ReturnArraySize yaparak bu düzeltebilecek bir constexpr:

template <typename T, int N> 
constexpr int ReturnArraySize(T (&arg1)[N]) { 
//~~~~~~^ 
    return N; 
} 
+0

Teşekkür geliyor sebebini bilmek istiyorum – skverma

+0

sabit var –