C++ 编译器会删除无效引用吗?
情况是,我希望使用描述性变量名作为成员变量,以便它们在标题中易于理解(例如:C++ 编译器会删除无效引用吗?,c++,reference,C++,Reference,情况是,我希望使用描述性变量名作为成员变量,以便它们在标题中易于理解(例如:min\u distance\u to\u polygon)。然而,在复杂的算法中,我会发现使用更短的变量名更为平滑,因为上下文是清楚的(例如,在这种情况下,minu dist) 所以在一个方法的定义中,我会写: int & min_dist = min_distance_to_polygon; 这会导致编译后的开销吗?这是可以接受的编码方式吗 编辑:这样会更好吗(因为它可以防止可能的复制) 编译器会删除无效引
min\u distance\u to\u polygon
)。然而,在复杂的算法中,我会发现使用更短的变量名更为平滑,因为上下文是清楚的(例如,在这种情况下,minu dist
)
所以在一个方法的定义中,我会写:
int & min_dist = min_distance_to_polygon;
这会导致编译后的开销吗?这是可以接受的编码方式吗
编辑:这样会更好吗(因为它可以防止可能的复制)
编译器会删除无效引用吗
视情况而定。如果可以的话,可能会。这种语言并不要求优化,而是允许的
这会导致编译后的开销吗?这是可以接受的编码方式吗
在这种情况下,如果编译器对程序进行了优化,那么开销就不太可能了
通常,您可以通过比较生成的部件是否具有参考来验证参考是否已优化。如果生成的程序集相同,则不会有任何开销
更一般地说,您可以通过测量来验证任何更改是否具有显著的开销
这样会更好吗
int & min_dist{min_distance_to_polygon};
它实际上是相同的
这会导致编译后的开销吗
没有优化编译器,这是编译器的基本优化。事实上,由于编译器的值跟踪和/或CPU寄存器在幕后的实际工作方式,即使复制该值也可能不会导致任何开销(假设它保持不变)(请参阅)
这是可以接受的编码风格吗
这是基于观点的,值得商榷。我假设存在这样的代码,这是一个合理的选择,但这样的代码是罕见的。最后,由你来判断未来的读者是否会发现这两个版本更容易阅读和理解
这样会更好吗(因为它可以防止可能的复制)
您显示的两个代码段在语义上完全相同—都是初始化。在
X=y中没有调用operator=
(甚至在概念上)
相关的可能重复:对于int
而言,即使在没有编译器优化的情况下复制,您也可能不会注意到任何差异。当您必须在可读性和过早优化之间进行选择时,最好选择first@formerlyknownas_463035818隐马尔可夫模型?甚至连一份拷贝都不会做。如果引用没有被省略,内存地址将被存储。不管编译器是否对此进行了优化,我认为我不喜欢你的策略:作为代码的读者,我会想知道这里到底发生了什么,以及为什么你似乎不必要地给变量加别名。我将尝试重新构造算法,减少对详细名称的引用,而不是通过赋值重命名它(并删除不必要的引用!复制它)。
int & min_dist{min_distance_to_polygon};