Я могу успешно сделать 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-бросок, позволяющий мне уйти от чего-то, чего я не должен был делать?
В конечном итоге причина, по которой я прошу об этом, заключается в том, что я вызываю функцию с указателем массива символов в качестве параметра, и я хотел бы использовать анонимный массив в качестве вызывающего аргумента.
Я использую GCC 4.4.6.
Это от C99, * "Постфиксное выражение, состоящее из имени типа в скобках, за которым следует скопированный закрытый список инициализаторов, представляет собой ** составной литерал **." *, Это не скопированный инициализатор, как в C++ –
Если вы хотите использовать синтаксис с принудительным инициализатором в любом случае, изменить подпись этой функции, чтобы принять 'std :: array' –