使用cout打印增量字符

the*_*dor 0 c++ pointers

为什么我必须在code函数内部的以下示例中对指针进行类型转换才能返回类型的值,char因为我已经在函数定义中将其声明为char的常量指针?

特别cout << (*p + 1)是结果是整数格式,而当更改为时,cout << (char) (*p + 1)结果以char格式显示,因为我对它进行了类型转换.

<<操作员是否有一些关于要显示的类型的默认参数?

#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++;
    }
}
Run Code Online (Sandbox Code Playgroud)

Log*_*uff 5

*pconst char和添加1(整数文字)促进它int(见此链接中的数字促销).你必须把它扔回去char:

cout << static_cast<char>(*p + 1); // abandon C-style cast
Run Code Online (Sandbox Code Playgroud)

是的,std::ostream::operator<<重载是为了区别对待不同的类型.

  • IIRC,添加两个类型为`char`的值将产生和`int`,因为默认的积分提升,所以转换`1`将不会. (3认同)