代码之家  ›  专栏  ›  技术社区  ›  asmmo

静态const<size<t>,std::as_const()或静态强制转换<const size<u t>)是否可以用于声明数组?

  •  0
  • asmmo  · 技术社区  · 5 年前

    我试了三条连续的线(每一条都是单独的),但没有一条成功。 为什么??

    int main()
    {
        size_t j{8};
    
    
        char arr[static_cast<const size_t>(j)]={'t'};
        char arr[static_const<size_t>(j)]={'t'};
        char arr[std::as_const(j)]={'t'};
    
    
        arr[7]='\0';
        std::cout<<arr;
    
    
        return 0;
    }
    
    2 回复  |  直到 5 年前
        1
  •  3
  •   Remy Lebeau    5 年前

    你的三个例子都不是 编译时的常量 ,因为 j 运行时才分配值 . 没有数量 铸造 j型 会改变的。

    分配 j型 在编译时,您需要将其声明为 const (或 constexpr 在C++ 11和以后)然后你可以使用 j型 与声明数组一样:

    int main()
    {
        const size_t j{8};
        // or: constexpr size_t j{8};
    
        char arr[j]={'t'};
    
        arr[7]='\0';
        std::cout<<arr;
    
        return 0;
    }
    
        2
  •  0
  •   Marshall Clow    5 年前

    好吧,让我们看看更新后的代码-它实际上编译了:

    #include <iostream>
    
    int main()
    {
        constexpr size_t j{8};
    
        char arr[j]={'t'};
    
        arr[7]='\0';
        std::cout<<arr;
    
        return 0;
    }
    

    j 现在是编译时常量,适合用于调整内置数组的大小。