«constexpr» 태그된 질문

constexpr은 C ++ 11에 도입 된 수정 자로서, 함수 또는 변수의 값이 알려져 있거나 컴파일 타임에 계산 될 수 있음을 컴파일러에 알립니다. 따라서 그렇지 않으면 불가능한 곳에서 상수로 사용할 수 있습니다.


14
C ++ 11에서 언제 constexpr 기능을 사용해야합니까?
"항상 5를 반환하는 함수"를 갖는 것이 "함수 호출"의 의미를 깨뜨 리거나 희석시키는 것 같습니다. 이유가 있거나이 기능이 필요하거나 C ++ 11에 있지 않아야합니다. 왜 거기에 있습니까? // preprocessor. #define MEANING_OF_LIFE 42 // constants: const int MeaningOfLife = 42; // constexpr-function: constexpr int MeaningOfLife () { return 42; } 리터럴 값을 …
337 c++  c++11  constexpr 


2
함수 내부의 정적 constexpr 변수가 의미가 있습니까?
내가 함수 내에서 (예를 들어, 큰 배열을) 변수가 있다면, 그것은 두 선언은 의미가 수행 static하고에게 constexpr? constexpr컴파일 타임에 배열이 생성되도록 보장하므로 static쓸모가 없습니까? void f() { static constexpr int x [] = { // a few thousand elements }; // do something with the array } 는 IS static생성 된 …
193 c++  static  c++11  constexpr 

6
정적 constexpr char []에 대한 정의되지 않은 참조
static const char수업에 배열 을 갖고 싶습니다 . GCC는 불만을 제기하고 사용해야한다고 말 constexpr했지만 이제는 정의되지 않은 참조라고 알려줍니다. 배열을 비 멤버로 만들면 컴파일됩니다. 무슨 일이야? // .hpp struct foo { void bar(); static constexpr char baz[] = "quz"; }; // .cpp void foo::bar() { std::string str(baz); // undefined reference …

4
constexpr에서 std :: string을 사용할 수 있습니까?
C ++ 11, Ubuntu 14.04, GCC 기본 툴체인 사용 . 이 코드는 실패합니다 : constexpr std::string constString = "constString"; 오류 : constexpr 변수 'constString'의 'const string {aka const std :: basic_string}'유형은 리터럴이 아닙니다 ... 왜냐하면 'std :: basic_string'은 사소한 소멸자를 갖지 않기 때문입니다. 그것은 사용할 수 있습니다 std::stringA의 constexpr? (분명히 …

2
constexpr은 인라인을 의미합니까?
다음 인라인 함수를 고려하십시오. // Inline specifier version #include<iostream> #include<cstdlib> inline int f(const int x); inline int f(const int x) { return 2*x; } int main(int argc, char* argv[]) { return f(std::atoi(argv[1])); } 및 constexpr 동등한 버전 : // Constexpr specifier version #include<iostream> #include<cstdlib> constexpr int f(const int x); constexpr …

2
C ++에서 "함수 독"이란 무엇을 의미합니까?
CppCon에서 Scott Schurr의 "Introducing constexpr" 강연의 끝 에서 그는 "기능을 독살하는 방법이 있습니까?"라고 묻습니다. 그런 다음 (비표준 방식이긴하지만) 다음과 같이이를 수행 할 수 있다고 설명합니다. 퍼팅 throwA의 constexpr기능 미해결 선언 extern const char* 해결되지 않은 참조 extern의를throw 나는 내가 여기서 내 깊이에서 약간 벗어난 것 같지만 궁금합니다. "기능 중독"이란 무엇을 …
96 c++  constexpr 

6
컴파일 타임에 C 문자열의 길이를 계산합니다. 이것은 정말로 constexpr입니까?
컴파일 타임에 문자열 리터럴의 길이를 계산하려고합니다. 이를 위해 다음 코드를 사용하고 있습니다. #include <cstdio> int constexpr length(const char* str) { return *str ? 1 + length(str + 1) : 0; } int main() { printf("%d %d", length("abcd"), length("abcdefgh")); } 모든 것이 예상대로 작동하고 프로그램은 4와 8을 인쇄합니다. clang에 의해 생성 …

3
Constexpr 대 매크로
매크로 사용을 선호하는 곳과 constexpr을 선호해야하는 곳 입니까? 기본적으로 동일하지 않습니까? #define MAX_HEIGHT 720 vs constexpr unsigned int max_height = 720;
92 c++  c++11  macros  constexpr 

3
컴파일 타임에 다차원 std :: vector의 깊이를 얻으려면 어떻게해야합니까?
다차원을 취하고 std::vector깊이 (또는 차원 수)를 템플릿 매개 변수로 전달 해야하는 함수가 있습니다. 이 값을 하드 코딩하는 대신 깊이를 값 으로 반환 하는 constexpr함수 를 작성하고 싶습니다 .std::vectorunsigned integer 예를 들면 다음과 같습니다. std::vector<std::vector<std::vector<int>>> v = { { { 0, 1}, { 2, 3 } }, { { 4, 5}, …

1
다시 방문한 C ++ 컴파일 타임 카운터
TL; DR 이 전체 게시물을 읽으려고 시도하기 전에 다음 사항을 숙지하십시오. 제시된 문제에 대한 해결책 은 나 자신 에 의해 발견 되었지만 여전히 분석이 올바른지 알고 싶어합니다. fameta::counter나머지 몇 가지 단점을 해결하는 클래스 로 솔루션을 패키지했습니다 . github에서 찾을 수 있습니다 . 당신은 godbolt 에 대한 직장에서 그것을 볼 수 …

1
전역 const char []를 constexpr string_view로 바꾸어야 할 문제가 있습니까?
우리 팀은 10 년 이상 된 C ++ 코드 기반으로 작업하고 있으며 최근에는 C ++ 17 컴파일러로 전환했습니다. 그래서 우리는 코드를 현대화하는 방법을 찾고 있습니다. YouTube에서 열린 컨퍼런스 토크에서 const char*전 세계 문자열을 로 바꾸 겠다는 제안을 들었습니다 constexpr string_view. 우리는 const char*코드에 많은 수의 전역 문자열 상수를 가지고 있기 …

1
std :: pair <auto, auto> 반환 유형
에서 놀고 auto있었습니다 std::pair. 아래 코드에서 함수 f는 std::pair템플릿 매개 변수에 따라 유형 중 하나를 반환해야합니다 . 실제 예 : 실시 예 1 template &lt;unsigned S&gt; auto f() { if constexpr (S == 1) return std::pair{1, 2}; // pair of ints else if constexpr (S == 2) return std::pair{1.0, 2.0}; …

2
C ++ 20 이전에 std :: swap 표시된 constexpr이 아닌 이유는 무엇입니까?
C ++ 20, std::swapa가됩니다 constexpr기능. 나는 표준 라이브러리가 사물을 표시하는 데 실제로 언어보다 뒤떨어져 있음을 알고 constexpr있지만 2017 년 &lt;algorithm&gt;에는 다른 것들과 마찬가지로 거의 constexpr이었습니다. 그러나 std::swap그렇지 않았습니다. 나는 그 표시를 막는 이상한 언어 결함이 있다는 것을 모호하게 기억하지만 세부 사항은 잊어 버립니다. 누군가 간결하고 명확하게 설명 할 수 있습니까? …

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.