Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 编译器会删除无效引用吗?_C++_Reference - Fatal编程技术网

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};