kgg124 Ответов: 1

Как использовать 'const int' ?


Всем привет.

У меня есть вопрос.

Я пытаюсь использовать функцию '_mm_extract_epi8', которая имеет параметр' const int ndx'.

инт _mm_extract_epi8(
__m128i в,
константный инт NDX по
);

Если я хочу использовать как показано ниже, что мне делать?

__m128i my128i;

for (int i=0; i<16; i++)
{
    _mm_extract_epi8(my128i, i); // I want to increase position.
}


Что я уже пробовал:

Я изменил код, как показано ниже, но он не работает.
for (int i=0; i<15; i++)
{
    const int idx=i;
    _mm_extract_epi8(my128i, idx);  // Compile Error!
}


-------------------------------------
Сообщение об ошибке: ошибка C2057: ожидаемое постоянное выражение.


Итак, я копирую и вставляю эту функцию.
_mm_extract_epi8(my128i, 0);
_mm_extract_epi8(my128i, 1);
_mm_extract_epi8(my128i, 2);
...
_mm_extract_epi8(my128i, 15);

[no name]

Что именно является ошибкой компиляции? Используйте "улучшить вопрос".

Joe Pizzi

Ваше сообщение об ошибке исходит из строки const int idx = i. поскольку i не является константой, компилятор не может генерировать код для этой строки. Код, который у вас есть в первом блоке кода (тот, который говорит :" Я хочу увеличить позицию"), кажется мне правильным. Что не работает в этом коде?

Выражение "const int ndx" в списке параметров говорит вам, что вызываемая функция _mm_extract_epi8 не изменит значение переменной, переданной для позиции номер 2 вызова. Он не ограничивает значение, которое вы ему придаете.

Кстати, между первым и вторым примерами вы изменили максимальную итерацию цикла с 15 на 14. Не знаю, намеревались ли вы это сделать. В вашем вопросе нет ничего, что указывало бы на то, что это не было ошибкой.

[no name]

"Ваше сообщение об ошибке из строки, const int idx = "
Не правильный. Это просто означает, что idx не может быть изменен. http://cboard.cprogramming.com/cplusplus-programming/168659-declaring-const-variables-inside-loops.html

На первый взгляд оба примера кода должны быть скомпилированы. Чего-то не хватает.

Philippe Mori

В этом вопросе чего-то не хватает, так как на первый взгляд никаких видимых проблем нет. Таким образом, проблема может быть связана с тем, как определяется какой-то другой символ.

Может быть, есть какие-то макро-трюки или какие-то специфические для платформы/оборудования вещи...

1 Ответов

Рейтинг:
1

OriginalGriff

Все это const действительно ли параметр функции гарантирует, что переменная не может быть изменена внутри тела функции - поэтому безопасно передавать постоянное значение, такое как 5 а также переменное значение, такое как numberOfMembers потому что функция не может изменить значение.
Так что просто вызовите его внутри цикла, как "нормальную" функцию:

_mm_extract_epi8(my128i, i);


CPallini

Вот и все. 5.