混淆C++ 翻译:float&,两个 for 循环

obfuscated C++ Translation: float&, two for loops

本文关键字:两个 for 循环 float C++ 翻译 混淆      更新时间:2023-10-16

我正在阅读Hacker News,这篇文章出现了。它包含一个光线追踪器,代码写在名片的背面。我认为将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?

这些可能是愚蠢的问题,但我想看看我是否能理解这一点,我的搜索没有找到任何东西。提前谢谢你!

float&是什么意思?

在这里,&的意思是"引用",因此参数是通过引用传递的。

我知道在其他地方&被用作==这里的情况是这样吗?

&在各种语境中意味着各种事物,但它从来不意味着==。在这种情况下,它也不是运算符;它是类型规范的一部分,这意味着它是引用类型。

我知道<<是位移,我认为&==

不,它是按位和运算符。结果设置了位,其中在两个操作数中都设置了一个位。在这里,以 1<<k 为一个操作数,结果是第 kG[j];因此,这将测试是否设置了该位。

for 循环

是否就像另一个循环中的一个 for 循环?

是的。如果你不在 for 循环的主体周围使用大括号,那么主体就是一个语句。所以在这种情况下,第一个循环的主体是第二个循环。为了明确这一点,我建议缩进循环的主体,并使用大括号,无论它们是否绝对必要。但是,当然,我不会(故意(编写混淆代码。

最后,这一行:v p(13,13,13);

v是一个构造函数接受三个参数的类。这声明了一个名为 p 的变量,类型为 v,使用该构造函数初始化;即三个坐标初始化为13

当你看到Vector& n它引用传递到函数中的向量时。这意味着您可以在此函数中更改n,而无需将其复制到另一个 Vector 或无需返回 Vector。前面的答案应该对您有所帮助。