我可以使用数组创建一个命名变量,如下所示:
char s[] = {1, 2, 3, 0};
if (strcmp(s, t))
...
Run Code Online (Sandbox Code Playgroud)
但是以下不起作用:
if (strcmp(char[]{1,2,3,0}, t))
...
Run Code Online (Sandbox Code Playgroud)
有没有办法用初始化列表指定临时的未命名数组?(在这种情况下,字符串文字可以工作,但对于char数组以外的数组?)
更新:
#include <iostream>
#include <cstring>
using namespace std;
typedef char CA[];
int main()
{
cout << CA{1,2,3, 0} << endl;
}
Run Code Online (Sandbox Code Playgroud)
给error: taking address of temporary array(g++-4.7.2 -std=gnu++11)
更新2:
我认为(也许)正在发生的事情是字符串文字被特别祝福为左值,但是临时数组是prvalues,因此你不能接受它们的地址.这是一个疯狂的猜测,我不确定.
更新3:
其实这应该是错的我想:
可以将"数组的NT"或"未知的T的数组"类型的左值或右值转换为"指向T的指针"的prvalue.结果是指向数组的第一个元素的指针.