Sunday 25 September 2016

c++ - Pass by pointer & Pass by reference










In both cases, I achieved the result.
So when is one preferred over the other? What are the reasons we use one over the other?




#include 
using namespace std;
void swap(int* x, int* y)
{
int z = *x;
*x=*y;
*y=z;
}
void swap(int& x, int& y)
{

int z = x;
x=y;
y=z;
}

int main()
{
int a = 45;
int b = 35;
cout<<"Before Swap\n";

cout<<"a="<
swap(&a,&b);
cout<<"After Swap with pass by pointer\n";
cout<<"a="<
swap(a,b);
cout<<"After Swap with pass by reference\n";
cout<<"a="<}



Output



Before Swap
a=45 b=35
After Swap with pass by pointer
a=35 b=45

After Swap with pass by reference

a=45 b=35

Answer



A reference is semantically the following:



T& <=> *(T * const)



const T& <=> *(T const * const)



T&& <=> [no C equivalent] (C++11)




As with other answers, the following from the C++ FAQ is the one-line answer: references when possible, pointers when needed.



An advantage over pointers is that you need explicit casting in order to pass NULL.
It's still possible, though.
Of the compilers I've tested, none emit a warning for the following:



int* p() {
return 0;
}

void x(int& y) {
y = 1;
}
int main() {
x(*p());
}

No comments:

Post a Comment

c++ - Does curly brackets matter for empty constructor?

Those brackets declare an empty, inline constructor. In that case, with them, the constructor does exist, it merely does nothing more than t...