raytracing — запутанный перевод C ++: float & amp ;, два для циклов

Я читал Новости Хакера и Эта статья подошел. Он содержит raytracer, код которого написан на обратной стороне визитной карточки. Я решил, что было бы неплохо с академической точки зрения перевести c ++ на python, но есть несколько концепций, на которых я застрял.

Сначала появляется эта функция: i T(v o,v d,f& t,v& n){...} Который переводится на int Tracer(vector o, vector d, float& t, vector& n){...} Что это float& имею в виду? Я знаю что в других местах & используется как == это тот случай здесь? Вы можете сделать это в C ++?

Во-вторых, я заметил эти три строки:

for(i k=19;k--;)  //For each columns of objects
for(i j=9;j--;)   //For each line on that columns
if(G[j]&1<<k){

Я знаю << немного сдвиг, и я предполагаю, & является ==, Являются ли циклы for такими же, как цикл for в другом?

Наконец, эта строка: v p(13,13,13); Я не совсем уверен, что он делает. Создает ли он класс, помеченный p, который расширяет v (вектор) со значениями по умолчанию 13,13,13?

Это, наверное, глупые вопросы, но я хочу посмотреть, смогу ли я это понять, и мои поиски ничего не дали. Заранее спасибо!

0

Решение

Что это float& имею в виду?

Вот, & означает «ссылка», поэтому аргумент передается по ссылке.

Я знаю что в других местах & используется как == это тот случай здесь?

& означает разные вещи в разных контекстах, но это никогда не значит ==, В этом случае это также не оператор; это часть спецификации типа, что означает, что это ссылочный тип.

Я знаю << немного сдвиг, и я предполагаю, & является ==

Нет, это поразрядно и оператор. В результате биты устанавливаются там, где бит установлен в обоих операндах. Здесь, с 1<<k как один операнд, результатом является кго немного G[j]; так что это проверяет, установлен ли этот бит.

Являются ли циклы for такими же, как цикл for в другом?

Да. Если вы не используете фигурные скобки вокруг тела цикла for, тогда тело — это одно утверждение. Таким образом, в этом случае тело первого цикла является вторым циклом. Чтобы прояснить это, я бы порекомендовал сделать отступ в теле цикла и использовать фигурные скобки независимо от того, являются ли они строго необходимыми. Но, конечно, я не пишу (намеренно) запутанный код.

Наконец, эта строка: v p(13,13,13);

v класс с конструктором, принимающим три аргумента Это объявляет переменную с именем pтипа vинициализирован с использованием этого конструктора; т.е. три координаты инициализируются в 13,

3

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

Когда ты видишьVector& n это ссылка на вектор, переданный в функцию. Это означает, что вы можете изменить n внутри этой функции без необходимости копировать ее в другой вектор или без возврата вектора. Этот предыдущий ответ должен быть полезным для вас.

1

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