2016-03-31 18 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; 
} 

Wenn ich den Code zu kompilieren, erhalte ich folgende Fehlermeldung:Übersetzungsfehler bei der Verwendung von constexpr

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

+0

Ich will den Grund wissen, warum dieser Fehler – skverma

Antwort

2

Da ReturnArraySize nicht als constexpr Funktion markiert, wird arr2 eine VLA (variable-length array, eine GCC-Erweiterung , nicht Teil des C++ - Standards), der zur Kompilierzeit nicht auf seine Größe abgefragt werden kann (dh von einer Funktionsvorlage abgeleitet).

Sie können dieses Problem beheben, indem ReturnArraySize machen ein constexpr:

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

Dank meiner Frage kommt bekam – skverma

+0

feste @skverma betrachten die Antwort zu akzeptieren –

Verwandte Themen