Arrays 强制转换匿名数组初始值设定项列表 我可以成功地为一个char字符串数组做初始化列表的C转换,但是不能让它与C++的CaseStudio(StasyPype)一起工作: intmain() { 字符x[]=“测试123”; //这很好: char**foo=(char*[]){a,x,abc}; 标准::cout

Arrays 强制转换匿名数组初始值设定项列表 我可以成功地为一个char字符串数组做初始化列表的C转换,但是不能让它与C++的CaseStudio(StasyPype)一起工作: intmain() { 字符x[]=“测试123”; //这很好: char**foo=(char*[]){a,x,abc}; 标准::cout,arrays,c++11,casting,initializer-list,Arrays,C++11,Casting,Initializer List,我可以成功地对字符字符串数组的初始值设定项列表进行C转换 不,你不能使用。你没有使用初始化列表,也没有使用C语言。你使用的是复合文字。它是C语言中不存在的C++语言。一些编译器确实支持C++作为语言扩展。 我强烈建议您使用一个编译器选项,当您使用非标准特性时,它至少会发出警告,以避免像这样的混淆 但是似乎不能用C++ Studio来工作 您不能强制转换初始值设定项列表表达式。您通常必须初始化命名数组,然后初始化指针-尽管您几乎不需要单独的指针变量,因为在大多数上下文中,数组隐式衰减为指针 con

我可以成功地对字符字符串数组的初始值设定项列表进行C转换

<>不,你不能使用。你没有使用初始化列表,也没有使用C语言。你使用的是复合文字。它是C语言中不存在的C++语言。一些编译器确实支持C++作为语言扩展。 我强烈建议您使用一个编译器选项,当您使用非标准特性时,它至少会发出警告,以避免像这样的混淆

<>但是似乎不能用C++ Studio

来工作 您不能强制转换初始值设定项列表表达式。您通常必须初始化命名数组,然后初始化指针-尽管您几乎不需要单独的指针变量,因为在大多数上下文中,数组隐式衰减为指针

const char* arr[] = { "a", x, "abc" };
const char** foo = arr;

我问这个问题的原因是我正在调用一个以char数组指针作为参数的函数,我想使用匿名数组作为调用参数

如果您可以修改函数,那么有几种方法可以允许在没有命名数组的情况下调用。您可以接受
std::initializer\u list
,或者可以从初始化器列表构造的类型,例如
std::array
的实例



< C++ >不允许在C++中从字符串文字到 char */COD>的隐式转换-但允许一些编译器作为语言扩展。使用<代码> const char */COD>此处。< /P>它来自C99,“后缀表达式由括号化的类型名,后面是括号括起来的初始化器组成,是复合文字。”,它不是C++中的带括号的初始值设定项如果您想使用带括号的初始值设定项语法,请将该函数的签名更改为接受我在本文档中遇到的
std::array
。我不确定是否应用了它,因为在本例中,“x”不是一个文本(但它的值可能作为文本复制到复合文本中?)。此外,该文件对这是否真的是一个强制转换有点不清楚。它将括号中的表达式称为强制转换,但也表示结果与强制转换不同。您的答案(和Piotr的)更清晰。我提到的函数是旧函数,因此我可能无法更改它。@user3065699为清晰起见:复合文字的组成部分不要求是文字。您链接的文档显示了一个字段也具有非文字值的示例。
const char* arr[] = { "a", x, "abc" };
const char** foo = arr;