次のように、配列を使用して名前付き変数を作成できます。
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 へのポインタ」型の prvalue に変換できます。結果は、配列の最初の要素へのポインターです。