[英]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.