Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.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++_Performance_Pointers_Reference - Fatal编程技术网

C++ 通过引用或指针进行访问的性能差异

C++ 通过引用或指针进行访问的性能差异,c++,performance,pointers,reference,C++,Performance,Pointers,Reference,此代码之间是否存在性能差异: struct foo example; my_function(&example); void my_function(struct foo *example); struct foo example; my_function(example); void my_function(struct foo &example); 该代码: struct foo example; my_functio

此代码之间是否存在性能差异:

struct foo   example;

my_function(&example);

void         my_function(struct foo *example);
struct foo   example;

my_function(example);

void         my_function(struct foo &example);
该代码:

struct foo   example;

my_function(&example);

void         my_function(struct foo *example);
struct foo   example;

my_function(example);

void         my_function(struct foo &example);

我认为这两种方法都是不同的,但是它们之间有什么性能差异吗?

< P>你所发布的代码是C++,而不是C,因为C缺少引用。

,C++中的引用类型与指针几乎没有区别,只是它不能在初始化之后指向不同的点(不能存储不同的地址)。实际上,它是一个指针,从指针到隐藏的指针对象,具有指针语义

对于引用,在引用应该始终指向有效内容的情况下,您可以获得一些额外的安全性。例如,您不能将空值分配给引用。因此,从C++的观点来看,很多时候都鼓励使用引用,因为它有更多的约束和变窄的选项可能意味着更少的滥用它的方式。 从性能的角度来看,在一个非常理论化的领域中,优化编译器可能会使用这样一个事实,即引用一旦分配给它,就不能更改地址。实际上,大多数优化编译器并不笨到需要程序员的帮助,许多人已经证明,优化编译器发出相同的程序集,而不管您使用的是引用还是指针


因此,您的问题的实际答案通常是否定的,没有性能差异。

第二个代码片段在C中无效。C中没有传递引用。您用C标记了您的问题,但C没有引用。你是说C++吗?除此之外,在性能方面不应该有任何区别。@Olaf我希望你的意思是说C没有引用?引用是一个隐藏指针语义的指针。正如其他人已经说过的,C没有引用,只有(显式)指针,所以这个问题毫无意义