gpt4 book ai didi

arrays - 转换匿名数组初始值设定项列表

转载 作者:行者123 更新时间:2023-12-04 02:09:19 35 4
gpt4 key购买 nike

我可以成功地对一个 char 字符串数组进行初始化列表的 C 转换,但似乎无法使用 C++ 转换 (static_cast):

int main()
{
char x[] = "test 123";

// This works fine:

char **foo = (char *[]) { "a", x, "abc" };
std::cout << "[0]: " << foo[0] << " [1]: " << foo[1]
<< " [2]: " << foo[2] << std::endl;

// This will not compile ("expected primary-expression before '{' token"):

//char **bar = static_cast<char *[]>( { "a", x, "abc" } );
//std::cout << "[0]: " << bar[0] << " [1]: " << bar[1]
// << " [2]: " << bar[2] << std::endl;
}

这里可以使用 C++ 转换吗?如果是这样,正确的语法是什么?如果不是,为什么不,C Actor 是否让我逃脱了我不应该做的事情?

最终,我问这个问题的原因是我正在调用一个以字符数组指针作为参数的函数,并且我想使用匿名数组作为调用参数。

我正在使用 GCC 4.4.6。

最佳答案

I can successfully do a C cast of an initializer list for an array of char strings

不,你不能。您根本没有使用初始值设定项列表或 C 类型转换。您使用的是复合文字。它是 C++ 中不存在的 C 语言功能。一些编译器在 C++ 中支持它们作为语言扩展。

我强烈建议您使用一个编译器选项,该选项至少会在您使用非标准功能时发出警告,以避免像这样的混淆。

but can't seem to get it to work with a C++ cast

您不能转换初始化列表表达式。您将必须正常初始化一个命名数组,然后是指针 - 尽管您几乎不需要一个单独的指针变量,因为无论如何在大多数情况下数组都会隐式衰减为一个指针。

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

the reason I'm asking this is that I am calling a function that has a char array pointer as a parameter, and I would like to use an anonymous array as the calling argument.

如果您可以修改该函数,则有一些方法可以允许在没有命名数组的情况下进行调用。您可以接受 std::initializer_list,或可以从初始化列表构造的类型,例如 std::array 的实例。


附言。在 C++ 中也不允许从字符串文字到 char* 的隐式转换 - 但某些编译器允许将其作为语言扩展。在此处使用 const char*

关于arrays - 转换匿名数组初始值设定项列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40210524/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com