Неправильные векторные значения C ++

Я в процессе создания приложения с openSG и C ++.

Может кто-нибудь сказать мне, почему эти строки (174ff):

Vec3f snakeDirection = (1,2,3);
std::cout << "direction"<<  snakeDirection<<"\n";

печать

direction 3,0,0

полный код моей сцены можно найти здесь:

http://pastie.org/9420616#20,177

1

Решение

В C ++ выражение (1,2,3) заставляет компилятор интерпретировать запятые в скобках как оператор последовательной оценки.
Оператор последовательной оценки является бинарным оператором, который оценивает свой первый операнд как void и отбрасывает результат, затем он оценивает второй операнд и возвращает его значение и тип. Поэтому выражение (1,2,3) будет оцениваться следующим образом:

  1. Первый 1 оценивается и отбрасывается, затем (2,3) оценивается и результат (2,3) возвращается
  2. Первый 2 оценивается и отбрасывается, затем 3 оценивается и результат 3 возвращается

Следовательно, оценка выражения (1,2,3) вернусь 3,

Таким образом, заявив:

Vec3f snakeDirection = (1,2,3);

то же самое, что заявить:

Vec3f snakeDirection = 3;

То, что вы, вероятно, намеревались написать, это либо:

Vec3f snakeDirection = Vec3f(1, 2, 3);

или же

Vec3f snakeDirection(1, 2, 3);

или же

Vec3f snakeDirection{1, 2, 3};

или же

Vec3f snakeDirection = {1, 2, 3};
5

Другие решения


По вопросам рекламы [email protected]