为什么 auto c='。'; 默认为int型?

代码和输出结果如下:


#include<iostream>

using namespace std;

int main()
{
    auto c='。';

    cout << typeid(c).name() << endl;

    cout << sizeof(c) << endl;
    cout << c << endl;

}

int
4
41379



c初始化的字符是中文的句号

中文句号不止一个字节,用char是存不下的。简单结论:只有英文半角字符(含标点和数字)是char能存放的。
(事实上char数组也能存放其他语言的字符串,但是不同编译器输出的字符集可能有差异。)
用单引号来放一个多个字节的字符,其行为是编译器自行决定的(标准没有规定)。要auto正确地为宽字符推导为wchar_t类型,不能简单使用双引号,要在双引号前加大写字母L。