Я думаю, что путаница здесь связана с убеждением, что {"Hey","Hello"}
- это массив. Это не. Это вовсе не объект. Это просто специальный синтаксис инициализатора, который можно использовать для инициализации массива. Вы не можете использовать его для инициализации char**
, потому что char**
является указателем, а не массивом. Он автоматически не создает объект массива, который можно преобразовать в указатель.
Возможно, вы думали об этом как о [...]
в Python или { ... }
объект в JavaScript. Это совсем не так. Эти выражения фактически создают объекты этого типа и могут использоваться в любом месте выражения, которое может принимать эти объекты.Синтаксис, который мы используем в C++, это только синтаксис инициализации.
Например, вы могли сделать это:
const char* array[] = {"Hey","Hello"};
const char** p = array;
Вы, однако, не может сделать что-то глупое вроде этого:
std::cout << {"Hey", "Hello"}[1];
Здесь мы фактически создали объект массива, в котором указатели будут сохранены. Только тогда мы можем преобразовать этот массив в const char**
.
Указатели не являются массивами. –