2013-10-01 2 views
-4

Я написал функцию в классе, возвращаемый указатель:Почему массивы не принимают указатели как инициализаторы?

 DATA_TYPE* foo(){ 
     ... 
     return DATA 
     } 

и в моей основной я попытался написать

int[10] = {Class.foo()}; 

, но это не сработало, но тогда почему

int[10] = {[12,...,123]}; 

работа?

+6

Это не какой-либо C++, я знаю. – andre

+4

Если бы я дал вам указатель, не могли бы вы рассказать мне размер массива, на который он указывает? На самом деле, не могли бы вы определить, является ли это указателем на массив? –

+0

И что произойдет, если вы удалите '{}' из первого примера? – Antoniossss

ответ

2

Зачем это работать? Указатель не является массивом; два типа не связаны. Массив является агрегатом и требует агрегатной инициализации . Указатель - это скаляр.

Обратите внимание, что при использовании агрегатной инициализации (или его эквивалента в равномерной инициализации синтаксисе C++ 11), вы предоставляете инициализаторов для отдельных элементов, не для всего массива. (Существует специальное исключение для инициализации char[] с строковым литералом.) Итак, вы пытаетесь инициализировать int с указателем, для которого требуется явно reinterpret_cast.

Смежные вопросы