Я могу создать именованную переменную с массивом следующим образом:
char s[] = {1, 2, 3, 0};
if (strcmp(s, t))
...
Однако следующее не работает:
if (strcmp(char[]{1,2,3,0}, t))
...
Можно ли указать временный неназванный массив с списком инициализаторов? (В этом случае строковый литерал будет работать, но для массивов, отличных от char массивов?)
Update:
#include <iostream>
#include <cstring>
using namespace std;
typedef char CA[];
int main()
{
cout << CA{1,2,3, 0} << endl;
}
дает error: taking address of temporary array
(g++-4.7.2 -std=gnu++11
)
Обновление 2:
Я думаю (возможно), что происходит в том, что строковые литералы особенно благословлены как lvalues, однако временные массивы являются prvalues, и поэтому вы не можете принять их адрес. Это, конечно, дикая догадка, но я не уверен.
Обновление 3:
Собственно, это должно быть неправильно, я думаю:
Значение lvalue или rvalue типа "массив N T" или "массив неизвестной границы T" можно преобразовать в prvalue типа "указатель на T". Результатом является указатель на первый элемент массива.