std::define_static_array
cppreference.net에서 가져옴
| 헤더 <meta>
|
||
template< ranges::input_range R >
consteval std::span<const ranges::range_value_t<R>> define_static_array( R&& r );
|
에 정의됨 (C++26부터) | |
배열을 정적 저장소로 승격합니다.
N이(가) 상수 표현식이면 static_cast<std::size_t>(ranges::size(r))이고, 그렇지 않으면 ranges::size(r)라고 합니다. std::dynamic_extent효과는 다음과 같습니다:
using T = ranges::range_value_t<R>;
std::meta::info array = std::meta::reflect_constant_array(r);
if (std::meta::is_array_type(std::meta::type_of(array)))
return std::span<const T, N>(std::meta::extract<const T*>(array),
std::meta::extent(std::meta::type_of(array)));
else
return std::span<const T, N>(static_cast<const T*>(nullptr), 0);
매개변수
| r | - | 요소가 복사 생성 가능하고 구조적 타입을 가지는 input_range |
반환값
r의 크기가 0이 아닌 경우, const T[N] 타입의 배열(여기서 T는 ranges::range_value_t<R>이고 N는 r의 크기)로부터 생성된 span입니다. 배열의 각 요소는 std::meta::reflect_constant(static_cast<T>(*it))이 나타내는 값 또는 객체로 초기화되며, 여기서 it은 r의 해당 요소를 가리키는 반복자입니다.
그렇지 않은 경우(r의 크기가 0인 경우), 빈 span입니다.
참고
템플릿 매개변수 객체로서, 결과 배열 객체(존재하는 경우)는 정적 저장 기간을 갖습니다. 템플릿 인자 동등 내용을 가진 범위는 동일한 배열 객체에 해당합니다.
배열 객체는 잠재적으로 유일하지 않은 객체입니다.
| 기능-테스트 매크로 | 값 | 표준 | 기능 |
|---|---|---|---|
__cpp_lib_define_static |
202506L |
(C++26) | std::define_static_array
|
예제
이 코드 실행하기
#include <algorithm>
#include <meta>
#include <print>
#include <vector>
constexpr std::vector<double> precompute_angles(std::size_t size)
{
std::vector<double> angles(size);
for (int i{}; double& angle : angles)
angle = 360.0 / size * i++;
return angles;
}
consteval std::span<const double> precompute_angles_arr(std::size_t size)
{
std::vector<double> angles = precompute_angles(size);
return std::define_static_array(angles);
}
int main()
{
// std::vector<double> angles = precompute_angles(7);
// error: call to consteval function ‘precompute_angles(7)’ is not a constant
// expression because it refers to a result of ‘operator new’
std::span<const double> angles = precompute_angles_arr(7);
for (double angle : angles)
std::print("{:.1f} ", angle);
std::println();
}
출력:
0.0 51.4 102.9 154.3 205.7 257.1 308.6
같이 보기
(C++26) |
컴파일 타임 문자열을 정적 저장소로 승격하여 정적 문자열의 첫 번째 문자에 대한 포인터를 반환합니다 (함수 템플릿) |
(C++26) |
컴파일 타임 값을 정적 저장소로 승격하여 정적 객체에 대한 포인터를 반환합니다 (함수 템플릿) |
(C++26) |
컴파일 타임 배열을 정적 저장소로 승격하여 정적 배열을 나타내는 리플렉션을 반환합니다 (함수 템플릿) |