Why do I have to typecast the pointer in the following example inside the `code` function in order to return values of type `char` since I already have declared it as a constant pointer to char in the function definition? 

In particular `cout << (*p + 1)` the result is in integer format, while when changing that to `cout << (char) (*p + 1)` then the result is displayed in char format, since I am typecasting it.

Does the `<<` operator have some default arguments as to what type to display?

```
#include <iostream>

using namespace std;

void code(const char* p);

int main()
{
    code("This is a test");

    return 0;
}

void code(const char* p)
{
    while(*p)
    {
        cout << (*p + 1);
        p++;
    }
}

```