Запитання з тегом «constexpr»

constexpr - це модифікатор, введений в C ++ 11, який інформує компілятор про те, що значення функції чи змінної відоме або може бути обчислене під час компіляції. Як такий, його можна використовувати як константу в місцях, де інакше не могло бути.


14
Коли слід використовувати здатність constexpr в C ++ 11?
Мені здається, що мати "функцію, яка завжди повертає 5", це порушує або розбавляє значення "виклику функції". Повинно бути причина чи потреба в цій здатності, або це не було б в C ++ 11. Чому саме там? // preprocessor. #define MEANING_OF_LIFE 42 // constants: const int MeaningOfLife = 42; // constexpr-function: …
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 …
193 c++  static  c++11  constexpr 

6
Невизначена посилання на статичну таблицю constexpr []
Я хочу мати static const charмасив у своєму класі. GCC поскаржився і сказав мені, що я повинен використовувати constexpr, хоча зараз він говорить мені, що це невизначене посилання. Якщо я зроблю масив не членом, то він компілюється. Що відбувається? // .hpp struct foo { void bar(); static constexpr char baz[] …

4
Чи можна використовувати std :: string в constexpr?
Використовуючи C ++ 11, Ubuntu 14.04, GCC за замовчуванням . Цей код не вдається: constexpr std::string constString = "constString"; помилка: тип 'const string {aka const std :: basic_string}' змінної constexpr 'constString' не є буквальним ... тому що ... 'std :: basic_string' має нетривіальний деструктор Чи можливо використовувати std::stringв 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 int …

2
Що означає «отруїти функцію» в C ++?
В самому кінці виступу Скотта Шура "Введення constexpr" на CppCon він запитує "Чи є спосіб отруїти функцію"? Потім він пояснює, що це можна зробити (хоча і нестандартно) шляхом: Поміщення a throwу 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 і …

3
Constexpr проти макросів
Де мені краще віддати перевагу використанню макросів, а де - constexpr ? Хіба вони в основному не однакові? #define MAX_HEIGHT 720 проти constexpr unsigned int max_height = 720;
92 c++  c++11  macros  constexpr 

3
Як я можу отримати глибину багатовимірного std :: вектора під час компіляції?
У мене є функція, яка займає багатовимірність std::vectorі вимагає передавати глибину (або кількість розмірів) як параметр шаблону. Замість жорсткого кодування цього значення я хотів би написати constexprфункцію, яка буде приймати std::vectorі повертати глибину як unsigned integerзначення. Наприклад: std::vector<std::vector<std::vector<int>>> v = { { { 0, 1}, { 2, 3 } }, …

1
C ++ скласти лічильники часу, переглянутий
TL; DR Перш ніж спробувати прочитати весь цей пост, знайте, що: рішення представленого питання я знайшов сам , але я все ще нетерплячий знати, чи правильний аналіз; Я розфасував це рішення в fameta::counterклас, який вирішує кілька залишків. Ви можете знайти його на github ; ви можете побачити це на роботі …

1
Будь-які проблеми, які замінюють глобальний const char [] на constexpr string_view?
Наша команда працює з базою кодів C ++ для 10+ років і нещодавно перейшла на компілятор C ++ 17. Тож ми шукаємо шляхи модернізації нашого коду. У конференції на YouTube я почув пропозицію замінити const char*глобальні рядки на constexpr string_view. Оскільки const char*в нашому коді є досить багато таких глобальних …

1
std :: пара <авто, авто> тип повернення
Я грав 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
Чому std :: swap не позначений constexpr перед C ++ 20?
В C ++ 20, std::swap стає constexprфункцією. Я знаю, що стандартна бібліотека дійсно відставала від мови в маркуванні речей constexpr, але до 2017 року &lt;algorithm&gt;була в значній мірі контекспр, як і купа інших речей. І все ж -std::swap не було. Я туманно пам'ятаю, що там був якийсь дивний мовний дефект, …

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.