我正在阅读黑客新闻并且this article出现了。它包含一个光线跟踪器,代码写在名片背面。我认为将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 :(得分:3)
float&
是什么意思?
这里,&
表示“引用”,因此参数通过引用传递。
我知道在其他地方使用
&
作为==
是这样的情况吗?
&
表示各种情境中的各种事物,但绝不意味着==
。在这种情况下,它也不是运营商;它是类型规范的一部分,意味着它是一个引用类型。
我知道&lt;&lt;是一个位移,我认为
&
是==
不,它是按位和运算符。结果将其位设置在两个操作数中的位。这里,1<<k
作为一个操作数,结果是G[j]
的k th 位;所以这测试是否设置了该位。
for循环是否就像另一个for循环一样?
是。如果你不在for循环的主体周围使用大括号,那么主体是一个单独的语句。所以在这种情况下,第一个循环的主体是第二个循环。为了清楚起见,我建议缩进循环体,并使用大括号,无论它们是否是绝对必要的。但当然,我不会(故意)编写混淆的代码。
最后,这一行:
v p(13,13,13);
v
是一个带有三个参数的构造函数的类。这声明了一个名为p
的变量,其类型为v
,使用该构造函数初始化;即三个坐标初始化为13
。
答案 1 :(得分:1)
当您看到Vector& n
时,它正在引用传递给函数的向量。这意味着您可以更改此函数内的n
,而无需将其复制到另一个Vector或不返回Vector。 This previous answer should be helpful to you.