Ich kann eine benannte Variable mit einem Array erstellen, wie folgt:Verwenden Array-Init-Liste als temporäre in C++ 11?
char s[] = {1, 2, 3, 0};
if (strcmp(s, t))
...
jedoch folgendes nicht funktioniert:
if (strcmp(char[]{1,2,3,0}, t))
...
Gibt es irgendeine Art und Weise eine temporäre unbenannte Array mit einer Initialisiererliste angeben ? (In diesem Fall wird ein Stringliteral funktionieren würde, aber für andere Arrays als char-Arrays?)
Update:
#include <iostream>
#include <cstring>
using namespace std;
typedef char CA[];
int main()
{
cout << CA{1,2,3, 0} << endl;
}
gibt error: taking address of temporary array
(g++-4.7.2 -std=gnu++11
)
Update 2:
Ich denke (vielleicht) was passiert ist, dass String-Literale besonders gesegnet sind als lvalues , jedoch temporäre Arrays sind prvalues , und als solche können Sie nicht ihre Adresse nehmen. Das ist eine wilde Vermutung, aber ich bin mir nicht sicher.
Update 3:
das sollte eigentlich falsch sein denke ich:
An lvalue or rvalue of type “array of N T” or “array of unknown bound of T” can be converted to a prvalue of type “pointer to T”. The result is a pointer to the first element of the array.
Welchen Vorteil hätte die Verwendung eines unbenannten temporären Arrays anstelle einer benannten Konstante? Es macht nicht viel zur Lesbarkeit. –
"Gibt es eine Möglichkeit, ein temporäres unbenanntes Array mit einer Initialisierungsliste anzugeben?" Nun, abgesehen von den 'typedef'-Dingen, die bereits unten beantwortet wurden, tut' std :: initializer_list' genau das, wenn Sie es an etwas übergeben, das mit jedem Bereich umgehen kann oder eine spezifische Überladung hat. –