我如何在C ++中编写简短的文字?

非常基本的问题:我如何在C ++中编写short文字?

我知道以下几点:

  • 2是一个int
  • 2U是一个unsigned int
  • 2L是一个long
  • 2LL long long
  • 2.0f是一个float
  • 2.0double
  • '2'是一个char
  • 但是,我将如何写一个short文字? 我试过2S但是这给了编译器警告。


    ((short)2)
    

    是的,这不仅仅是一个简短的文字,更多的是一个铸造的诠释,但行为是相同的,我认为没有一个直接的方式来做到这一点。

    这就是我一直在做的事情,因为我找不到任何关于它的事情。 我猜想编译器会足够聪明来编译它,就好像它是一个简短的文字(即它实际上不会分配一个int然后每次都会抛出它)。

    以下说明您应该多担心这个问题:

    a = 2L;
    b = 2.0;
    c = (short)2;
    d = '2';
    

    编译 - >反汇编 - >

    movl    $2, _a
    movl    $2, _b
    movl    $2, _c
    movl    $2, _d
    

    C ++ 11让你非常接近你想要的东西。 (搜索“用户定义文字”以了解更多信息。)

    #include <cstdint>
    
    inline std::uint16_t operator "" _u(unsigned long long value)
    {
        return static_cast<std::uint16_t>(value);
    }
    
    void func(std::uint32_t value); // 1
    void func(std::uint16_t value); // 2
    
    func(0x1234U); // calls 1
    func(0x1234_u); // calls 2
    
    // also
    inline std::int16_t operator "" _s(unsigned long long value)
    {
        return static_cast<std::int16_t>(value);
    }
    

    即使是C99标准的作者也被这个问题所困扰。 这是Danny Smith的公有领域stdint.h实现的一个片段:

    /* 7.18.4.1  Macros for minimum-width integer constants
    
        Accoding to Douglas Gwyn <gwyn@arl.mil>:
        "This spec was changed in ISO/IEC 9899:1999 TC1; in ISO/IEC
        9899:1999 as initially published, the expansion was required
        to be an integer constant of precisely matching type, which
        is impossible to accomplish for the shorter types on most
        platforms, because C99 provides no standard way to designate
        an integer constant with width less than that of type int.
        TC1 changed this to require just an integer constant
        *expression* with *promoted* type."
    */
    
    链接地址: http://www.djcxy.com/p/58323.html

    上一篇: How do I write a short literal in C++?

    下一篇: reestablish dropped bluetooth connection in python 3