簡體   English   中英

可以 static_const<size_t> ()、std::as_const() 或 static_cast<const size_t> () 用於聲明數組?

[英]Can static_const<size_t>(), std::as_const() or static_cast<const size_t>() be used to declare an array?

我嘗試了三行連續的行(每行單獨),但沒有一行行得通。 為什么??

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;
}

您的 3 個示例都不是編譯時的常量,因為j直到運行時才賦值 任何鑄造j都不會改變這一點。

要在編譯時分配j ,您需要將其聲明為const (或 C++11 及更高版本中的constexpr ),然后您可以按原樣使用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;
}

好的,讓我們看一下更新后的代碼 - 實際上可以編譯:

#include <iostream>

int main()
{
    constexpr size_t j{8};

    char arr[j]={'t'};

    arr[7]='\0';
    std::cout<<arr;

    return 0;
}

j現在是一個編譯時常量,適合用於調整內置數組的大小。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM