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)也是如此
如果数据来自另一个函数,为什么这很重要?请做一个提示。召唤锁销:| | | |但如果不明显,编译器生成的代码在按指针传递和按引用传递之间没有任何区别。语言律师可能会说未来的实现“可能”.但在实践中,没有一种体系结构能带来不同。