允许多个字符的C ++字符串初始化

时间:2016-12-26 12:21:31

标签: c++ char

在通过阅读一本书学习C ++的过程中,我看到了(对我来说)奇怪的代码行。

char ch('AB'); // Or char ch = 'AB';

这对我来说很奇怪,因为我不知道你可以分配给char多个"字母"没有任何例外。

cout << "Characters in ch: " << ch << endl; // Output B

为什么这样做?它是如何在内部工作的?它只保存最后一个字符并忽略其他字符吗?

2 个答案:

答案 0 :(得分:3)

它被称为multicharacter literal,它们是完全有效的C ++:

  

多字符文字,例如'AB',具有类型int和实现定义的值。

     

[...]

     

多字符文字的许多实现使用文字中每个字符的值来初始化结果整数的连续字节,以big-endian顺序,例如, '\1\2\3\4'的值为0x01020304

答案 1 :(得分:2)

  

对我来说很奇怪,因为我没有得到你可以分配给多个字母&#34;字母&#34;没有任何例外。

您应该将其视为类型转换(demo):

#include <iostream>

using namespace std;

int main()
{
    {
        int i = 'abcd';
        char c = i; // cast form int to char -> c == 'd'
        cout << c; // prints 'd'
    }

    {
        char c = 'abcd'; // cast form int to char -> c == 'd'
        cout << c; // prints 'd'
    }

    return 0;
}

字符在int中的存储顺序不是由标准指定的。但是,设计良好的编译器在存储多字符常量时会考虑字节顺序:GCC和VisualC的行为方式相同。