I know the concept of register variable and it's use cases but there are few questions in my mind based on what I have tried.
I cannot access the address of a register variable in C though I can do it C++! Why? Is there any issue in accessing the addressing of a register variable?
Suppose if I declare a string variable in C++ as register, then where will that variable be stored? What is the point in declaring the storage class of non-numeric data types such as 'string' in C++ to be register??
UPDATE:I thought that C++ allows us to fetch the address of a register variable, as I was not getting any error in my program which is as follows:
#include<iostream>#include<time.h>using namespace std;clock_t beg, en;int main(){ int j, k=0; beg=clock(); for(register int i=0;i<10000000;i++){ /*if(k==0){ cout<<&i<<endl; // if this code is uncommented, then C++ rejects the recommendation to make 'i' as register k++; }*/ } en=clock(); cout<<en-beg<<endl; cout<<&j<<endl<<&k; return 0;}
What I have observed is, if I make the variable 'i' as register and don't try to print the address using '&i' then C++ accepts the recommendation and stores 'i' in register, this can be infered from running time of for loop which will always be around 4-12 ms if 'i' is in register. But if I try to print address of variable 'i' then though I don't get any error but C++ rejects the recommendation and this can be infered from the time of execution of loop which is always more than 25 if i is not register!!
So, basically I cannot fetch address of a variable with storage class as register in both C as well as C++!! WHY?