Friday 1 March 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

php - file_get_contents shows unexpected output while reading a file

I want to output an inline jpg image as a base64 encoded string, however when I do this : $contents = file_get_contents($filename); print &q...