posso creare una variabile denominata con una serie come segue:Utilizzo dell'elenco di inizializzazione dell'array come temporaneo in C++ 11?
char s[] = {1, 2, 3, 0};
if (strcmp(s, t))
...
Tuttavia, il seguente non funziona:
if (strcmp(char[]{1,2,3,0}, t))
...
c'è qualche modo per specificare una matrice senza nome provvisorio con una lista di inizializzazione ? (In questo caso una stringa letterale avrebbe funzionato, ma per gli array diversi array char?)
Aggiornamento:
#include <iostream>
#include <cstring>
using namespace std;
typedef char CA[];
int main()
{
cout << CA{1,2,3, 0} << endl;
}
dà error: taking address of temporary array
(g++-4.7.2 -std=gnu++11
)
Aggiornamento 2:
Penso (forse) che cosa sta succedendo è che i letterali stringa sono appositamente benedetti come lvalues , tuttavia gli array temporanei sono valori di riferimento e pertanto non è possibile prendere il proprio indirizzo. Questa è un'ipotesi, però, non ne sono sicuro.
Update 3:
realtà che dovrebbe essere sbagliato penso:
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.
Quale sarebbe il vantaggio di utilizzare una matrice temporanea senza nome invece di una costante denominata? Non fa molto per la leggibilità. –
"C'è un modo per specificare un array senza nome temporaneo con un elenco di inizializzatore?" Bene, a parte il materiale 'typedef' già risposto qui sotto,' std :: initializer_list' fa esattamente questo, se lo passi a qualcosa che può gestire qualsiasi intervallo o ha un sovraccarico specifico. –