1

私はコードC++ 11を持っています:

template<std::size_t n>
static inline constexpr uint32_t mask() noexcept 
{ 
    static_assert(n <= 32, "!");
    using list = uint32_t[]; 

    return list{
        0x0u, 
        0x1u,       0x3u,       0x7,        0xfu,       0x1fu,       0x3fu,       0x7fu,       0xffu, 
        0x1ffu,     0x3ffu,     0x7ffu,     0xfffu,     0x1fffu,     0x3fffu,     0x7fffu,     0xffffu, 
        0x1ffffu,   0x3ffffu,   0x7ffffu,   0xfffffu,   0x1fffffu,   0x3fffffu,   0x7fffffu,   0xffffffu, 
        0x1ffffffu, 0x3ffffffu, 0x7ffffffu, 0xfffffffu, 0x1fffffffu, 0x3fffffffu, 0x7fffffffu, 0xffffffffu
    } [ n ]; 
}

Q:list配列はどこに保存されますか? (静的メモリ、自動メモリ、またはどこにも保存されていない)?

4

2 に答える 2

4

通常の関数では、自動メモリに一時的に保存されます。nはコンパイル時の定数であるため、配列を削除して単純に値を返すように最適化することができます。

ただし、これはconstexprであるため、戻り値はコンパイル時に計算する必要があります。配列は、実行時にまったく存在してはなりません。

于 2013-09-05T12:14:46.870 に答える