我可以使用数组创建一个命名变量,如下所示:
char s[] = {1, 2, 3, 0};
if (strcmp(s, t))
...
但是以下不起作用:
if (strcmp(char[]{1,2,3,0}, t))
...
有没有办法用初始化列表指定一个临时的未命名数组?(在这种情况下,字符串文字可以工作,但对于 char 数组以外的数组?)
更新:
#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:
其实我认为这应该是错误的:
“NT 数组”或“T 的未知边界数组”类型的左值或右值可以转换为“指向 T 的指针”类型的纯右值。结果是指向数组第一个元素的指针。