Friday, March 1, 2019

c++ - Obtaining a pointer to the end of an array



I use the following template to obtain a pointer pointing after the last element of an array:



template 
T* end_of(T (&array)[n])
{
return array + n;
}


Now I seem to remember that there was some problem with this approach, but I cannot remember what it was. I believe it had something to with the choice of the type parameters or function parameters, but I'm not sure. So just as a sanity check, do you see any problems with the above code? Small usage test:



int test[] = {11, 19, 5, 17, 7, 3, 13, 2};
std::sort(test, end_of(test));

Answer



Your proposal is not necessarily evaluated at compile time, it depends on optimisation. The following is calculated at compile time:



template  char (&array(T(&)[N]))[N];

int main()
{
int myArray[10];

std::cout << sizeof array(myArray) << std::endl;

return 0;
}


It works by creating an array type of char which is the same number of elements as the given array. sizeof always returns size in number of chars.


No comments:

Post a Comment

plot explanation - Why did Peaches&#39; mom hang on the tree? - Movies &amp; TV

In the middle of the movie Ice Age: Continental Drift Peaches' mom asked Peaches to go to sleep. Then, she hung on the tree. This parti...