Ich schrieb eine constexpr-Funktion, die ein Array zurückgibt.consExpr Array zurückgeben, GCC-Warnung
#include <iostream>
constexpr auto get_str(void)
-> const char(&)[4] {
return { 'T', 'E', 'S', 'T' };
}
constexpr int sum(const char(&str)[4]){
return str[0] + str[1] + str[2] + str[3];
}
int main(void){
constexpr int s = sum(get_str());
std::cout << s << std::endl;
return 0;
}
g ++ 4.8 kompiliert den Code richtig, aber gibt die folgende Warnung:
test.cpp: In function ‘constexpr const char (& get_str())[4]’:
test.cpp:5:30: warning: returning reference to temporary [-Wreturn-local-addr]
return { 'T', 'E', 'S', 'T' };
ist die Warnung richtig unter diesen Umständen? Ist es inkorrekt, ein Array von einer solchen constexpr-Funktion zurückzugeben, obwohl die Funktion zur Laufzeit eigentlich nie aufgerufen wird, nur während der Kompilierung?
Sie können 'std :: array ', um eine statische Contexpr-Matrix nach Wert zurückzugeben, anstatt eine Referenz zurückzugeben. –
@MikaelPersson Danke, ich habe versucht, std :: array an einem Punkt, aber mein voller Code macht einige seltsame Dinge, die eine Kompilierung-Konvertierung in const char *, und ich konnte nicht tun Arr [0] in einer Konstante Ausdruck. – Xeno