2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
1

Constexpr конструктор

03.04.2017, 19:26. Показов 5219. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день, что означает constexpt конструктор?

C++
1
2
3
4
5
6
7
8
9
10
11
class Foo
{
public:
    constexpr Foo() noexcept = default;
};
 
int main()
{
    Foo a;
    ( void )a;
}
Это означает, что компилятор может создать объект вовремя компиляции? Зачем мне объекты на этапе компиляции то?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.04.2017, 19:26
Ответы с готовыми решениями:

Constexpr конструктор и инициализация массива
Подскажите и разъясните пожалуйста почему почему нельзя или как можно инициализировать статический...

Присваивание constexpr к non-constexpr
constexpr float pi = 3.14159265; void some_fun() { float angle = 45.0f*(pi/180.0f); ...

Constexpr
В программе внутри конструкции switch case, встретился с шибкой the value of 'str' is not usable...

Constexpr функции
В продолжении моего вопроса в этой теме -...

16
Эксперт С++
1624 / 954 / 782
Регистрация: 06.02.2016
Сообщений: 2,452
Записей в блоге: 31
03.04.2017, 19:34 2
Мейерс обосновывает это так
Миниатюры
Constexpr конструктор  
1
Эксперт С++
1624 / 954 / 782
Регистрация: 06.02.2016
Сообщений: 2,452
Записей в блоге: 31
03.04.2017, 19:36 3
И ещё
Миниатюры
Constexpr конструктор  
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
03.04.2017, 19:46  [ТС] 4
такое ощущение, что такие объекты расширяют бинарь до неузнаваемости
0
Неэпический
17869 / 10634 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
03.04.2017, 20:05 5
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
Зачем мне объекты на этапе компиляции то?
Мы то откуда знаем зачем они Вам?
Ну раз не нужны, то не используйте.
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
03.04.2017, 20:25  [ТС] 6
Цитата Сообщение от Croessmah Посмотреть сообщение
Ну раз не нужны, то не используйте.
Так вот как оно работает!

А про бинарь то верно? Все эти "числовые литералы" если будут переданы в не constexpr должны быть с билде и в большом проекте это много байт получиться)
0
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
03.04.2017, 22:27 7
Чтобы создавать constexpr объекты. Но это как и constexpr функции - зависит от контекста вызова. То есть возможность создавать constexpr объекты не перекрывает возможность создавать не constexpr объекты.
0
495 / 209 / 70
Регистрация: 27.05.2016
Сообщений: 557
04.04.2017, 00:47 8
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
Так вот как оно работает!
Может работать на этапе компиляции:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <array>
 
struct A
{
    constexpr explicit A(int v) : val(v) {}
    int val;
};
 
int main()
{
    constexpr A a(42);
    static_assert(a.val == 42, "");
 
    std::array<int, a.val> arr;
}
1
tapochka
04.04.2017, 01:37
  #9

Не по теме:

хм, а в комитете еще до constexpr new int[3] никто не додумался?

0
Kastaneda
04.04.2017, 08:35
  #10

Не по теме:

Цитата Сообщение от rikimaru2013 Посмотреть сообщение
Так вот как оно работает!
половина С++ так работает :D

0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
04.04.2017, 10:28  [ТС] 11
Цитата Сообщение от tapochka Посмотреть сообщение
хм, а в комитете еще до constexpr new int[3] никто не додумался?
а как узнать на этапе компиляции номер адресса, который тебе даст ОС потом?
0
techpriest
634 / 213 / 57
Регистрация: 27.02.2014
Сообщений: 1,180
04.04.2017, 10:31 12
Ну, принципиальной проблемы тут нет. Сначала объекты вычисляются в абстракции, а потом уже размещаются... Почему бы и нет .
0
5231 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,113
Записей в блоге: 2
04.04.2017, 10:38 13
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
а как узнать на этапе компиляции номер адресса, который тебе даст ОС потом?
А как узнать адрес строки
C++
1
constexpr char* str = "Hello";
?
0
Неэпический
17869 / 10634 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
04.04.2017, 10:49 14
Kastaneda, SSO - яркий пример.
0
5231 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,113
Записей в блоге: 2
04.04.2017, 10:54 15
Цитата Сообщение от Croessmah Посмотреть сообщение
Kastaneda, SSO - яркий пример.
да не, я понимаю как это работает) не понял при чем тут SSO, на сколько я знаю, там все же char[], а не char*.
0
42 / 42 / 17
Регистрация: 25.04.2014
Сообщений: 499
05.04.2017, 20:15 16
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
а как узнать на этапе компиляции номер адресса, который тебе даст ОС потом?
да пес знает, я ж с сарказмом сказал, мало ли что им там в голову взбредет)
но для std::addressof уже что-то наклевывается http://stackoverflow.com/quest... ion-in-c17
0
rat0r
29.04.2018, 12:51     Constexpr конструктор
  #17

Не по теме:

Цитата Сообщение от tapochka Посмотреть сообщение
хм, а в комитете еще до constexpr new int[3] никто не додумался?
https://groups.google.com/a/is... MEJMXB-moJ

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.04.2018, 12:51

как работает if constexpr?
Допустим я не хочу писать писать вариадик макрос, но при этом отключить генерацию кода(а в идеале и...

Пример применения constexpr
Здравствуйте, можете привести и объяснить, какой нибудь простенький пример, уместного использования...

Использование constexpr vs const
Добрый вечер, есть 2 кода: Первый: constexpr float FIXED_FPS = 45.0f; constexpr float...

Std::log2 и constexpr
Я бы хотел прояснить пару моментов по std::log2. 1) Это constexpr функция? Выставил gcc ключ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru