C++ 当原始数据为指针时,使用指针或引用传递参数?

C++ 当原始数据为指针时,使用指针或引用传递参数?,c++,C++,我需要从二进制文件中读取一些数据,我将数据指针保存在一个向量中 我想用最好的性能来处理它们 我有两种设计,请看这个: struct A { int a, b,c; } void Handle(const A & a) { // do something } void Handle(A * a) { } std::vector<A* > av; // this is read from file for (int i = 0; i < 1000; ++i) {

我需要从二进制文件中读取一些数据,我将数据指针保存在一个向量中

我想用最好的性能来处理它们

我有两种设计,请看这个:

struct A {
  int a, b,c;
}
void Handle(const A & a) {
// do something
}

void Handle(A * a) {

}
std::vector<A* > av; // this is read from file
for (int i = 0; i < 1000; ++i) {
  // is there any difference between these two method? !!!!
  // Handle(av[i]);
  // Handle(*(av[i]))  // does this create a temp variable which speed down the code?
}
结构A{ INTA、b、c; } 无效句柄(常数A和A){ //做点什么 } 无效句柄(A*A){ } std::vector av;//这是从文件中读取的 对于(int i=0;i<1000;++i){ //这两种方法有什么区别吗!!!! //句柄(av[i]); //Handle(*(av[i])//这是否会创建一个降低代码速度的临时变量? }
我想知道他们之间有什么区别吗?哪一个更快?

指针和引用在性能方面基本相同:它们在可运行代码中的实现是相同的(当然,这个规则也有例外,但我想不出任何例外)

引用和指针之间的区别主要在于程序员-引用具有更清晰的语法(即,在使用数据时不需要取消引用),而指针支持
nullptr
值和指针算法。一般的样式规则是“在可能时使用引用,在必须时使用指针”

还可以从指针到引用再到引用进行转换,因此在编写代码时,这些选项同样强大。例如:

void Handle(A& a)
{
    std::cout << a.field;
    another_function_which_receives_reference(a);
    another_function_which_receives_pointer(&a);
}

void Handle(A* a)
{
    std::cout << a->field;
    another_function_which_receives_reference(*a);
    another_function_which_receives_pointer(a);
}
void句柄(A&A)
{

在性能方面,指针和引用基本上是相同的:它们在可运行代码中的实现是相同的(当然,这个规则也有例外,但我想不出任何例外)

引用和指针的区别主要在于程序员——引用有更清晰的语法(即,在使用数据时不需要取消引用),而指针支持
nullptr
值和指针算法。一般样式规则是“在可以的时候使用引用,在必须的时候使用指针”

还可以从指针转换到引用和返回,因此在编写代码时,这些选项同样强大。例如:

void Handle(A& a)
{
    std::cout << a.field;
    another_function_which_receives_reference(a);
    another_function_which_receives_pointer(&a);
}

void Handle(A* a)
{
    std::cout << a->field;
    another_function_which_receives_reference(*a);
    another_function_which_receives_pointer(a);
}
void句柄(A&A)
{

std::cout为什么要将指针存储在向量中,而不是实际数据中?编译器可以更自由地对
Handle(const a&a)
进行优化,这仅仅是因为
const
关键字。如果您声明另一个
Handler(const a*a)
您可能会得到相同的结果。
Handler也是如此(const A*const A)
如果数据来自另一个函数,为什么这很重要?请做一个。召唤锁销:| | | | |但如果不明显,编译器生成的代码在按指针传递和按引用传递之间没有任何区别。语言律师可能会说未来的实现“可能”。但在实践中,没有一种体系结构能起到作用。为什么要将指针存储在向量中,而不是实际数据中?编译器可以更自由地对
句柄(const a&a)
进行优化,这仅仅是因为
const
关键字。如果声明另一个
句柄(const a*a)
您可能会得到相同的结果。对于
处理程序(const A*const A)也是如此
如果数据来自另一个函数,为什么这很重要?请做一个提示。召唤锁销:| | | |但如果不明显,编译器生成的代码在按指针传递和按引用传递之间没有任何区别。语言律师可能会说未来的实现“可能”.但在实践中,没有一种体系结构能带来不同。