Раздавание фиксированного размера выстраивает в C++?

При выполнении чего-нибудь для сети или какого-либо обращенного к передней стороне приложения в этом отношении Вы действительно должны ее себе для чтения...

не заставляют меня думать - Steve Krug

15
задан static_rtti 18 November 2009 в 10:21
поделиться

5 ответов

Используя C ++ 0x, почти завершенный новый стандарт C ++ (уже реализованный в последних версиях gcc и msvc IIRC), вы можете делать именно так, как хотите! Просто используйте std :: array вместо int [3].

std::array<int, 3> array_func()
{
    return {1,1,1};
}

int main(int argc,char * argv[])
{
    std::array<int, 3> point = array_func();
}
19
ответ дан 1 December 2019 в 00:02
поделиться

Поместите массив в структуру. boost :: array - это такой пакет:

boost::array<int, 3> array_func() {
  boost::array<int, 3> a = {{ 1, 1, 1 }};
  return a;
}

int main() {
  boost::array<int, 3> b = array_func();
}

Быстро и грязно:

template<typename E, size_t S>
struct my_array {
  E data[S];
};

Обратите внимание, как вы можете использовать синтаксис агрегированной инициализации.

21
ответ дан 1 December 2019 в 00:02
поделиться

Вы можете обернуть его в struct , чтобы сделать его возвращаемым по значению:

struct Vec3
{
  float x[3];
}

Vec3 array_func()
{
  Vec3 x = { 1.f, 1.f, 1.f };

  return x;
}

Я не думаю, что вы можете использовать синтаксис инициализатора массива непосредственно в возврате заявление. Конечно, вы можете ввести конструктор (в конце концов, структуры - это просто классы со всеми открытыми членами):

struct Vec3
{
  Vec3(a, b, c)
  {
    x[0] = a;
    x[1] = b;
    x[2] = c;
  }

  float x[3];
}

Vec3 array_func()
{
  return Vec3(1.f, 1.f, 1.f);
}
18
ответ дан 1 December 2019 в 00:02
поделиться

boost :: array - это оболочка для массива на основе стека.

Обратите внимание, что выделение стека будет дешевле, чем использование «нового», когда вы не используете необходимость копировать большие массивы.

0
ответ дан 1 December 2019 в 00:02
поделиться

вы не можете вернуть массив фиксированного размера в C ++. вы можете вернуть указатель на int (который будет использоваться как массив), но для этого потребуется выделить массив в куче с помощью new .

в любом случае, вы можете передать свой массив в качестве аргумента функции:

void array_func( int result[3])
{
    result[0] = 1;
    result[1] = 1;
    result[2] = 1;
}

int main(int argc,char * argv[])
{
    int point[3];
    array_func( point );
}

однако это больше похоже на C, чем на C ++ ...

2
ответ дан 1 December 2019 в 00:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: