0

您是否觉得const每次值不会更改时严格使用或仅在数据将被修改时将参数作为指针传递是否很重要?

我想做正确的事情,但是如果struct作为参数传递的参数很大,你不想传递地址而不是复制数据吗?struct通常,将参数声明为操作数似乎是最实用的。

//line1 and line2 unchanged in intersect function
v3f intersect( const line_struct line1, const line_struct line2); 
//"right" method?  Would prefer this:
v3f intersect2( line_struct &line1, line_struct &line2); 
4

2 回答 2

1
v3f intersect( const line_struct line1, const line_struct line2);

完全等同于

v3f intersect(line_struct line1, line_struct line2);

就外部行为而言,由于将行复制到intersect,因此无法通过函数修改原始行。只有当您使用表单实现(而不是声明)函数时const,才会有区别,但外部行为没有区别。

这些形式不同于

v3f intersect(const line_struct *line1, const line_struct *line2);

它不必复制行,因为它只传递指针。这是 C 中的首选形式,尤其是对于大型结构。不透明类型也需要它。

v3f intersect2(line_struct &line1, line_struct &line2);

无效 C.

于 2012-02-23T21:37:54.650 回答
0

C 没有引用 (&)。

在 C 中,使用指向const结构的指针作为参数类型:

v3f intersect(const line_struct *line1, const line_struct *line2);

所以在函数调用中只会复制一个指针,而不是整个结构。

于 2012-02-23T21:37:51.953 回答