Войти
ПрограммированиеФорумОбщее

constexpr вычитание указателей (3 стр)

Страницы: 1 2 3
#30
11:22, 3 янв. 2016

А при str+4, str+8 падает?


#31
11:42, 3 янв. 2016

Kroll
> А при str+4, str+8 падает?
Нет, складывать можно с чем угодно.

#32
12:56, 3 янв. 2016

Нет, не падает? Или нет - складывать можно с чем угодно.
Если при str+4, str+8 не падает, может проблема с выравниванием int-а в compile-time?

#33
12:58, 3 янв. 2016

gammaker
> складывать можно с чем угодно.
Даже так?
srt.end + (-str.begin)

#34
13:02, 3 янв. 2016

Kroll
> Нет, не падает? Или нет - складывать можно с чем угодно.
> Если при str+4, str+8 не падает, может проблема с выравниванием int-а в
> compile-time?
Падает на третьей строчке, а не второй. От второй никак вообще падение не зависит. К падению приводит именно сам факт вычитания указателей в compile time. А выравнивание вообще при чём тут не пойму?

eMan.Lived
> Даже так?
> srt.end + (-str.begin)
Это вообще по правилам языка нельзя делать.

#35
13:19, 3 янв. 2016

А ежели так?

constexpr const std::ptrdiff_t str3 = str2 - str;

#36
13:24, 3 янв. 2016

Ты не понял сути моего предположения. Где речь о второй строке?
При том: https://en.wikipedia.org/wiki/Bus_error

А нет. Я не прав. Выравнивание ни при чём.

#37
16:03, 3 янв. 2016

eMan.Lived
> А ежели так?
Оно падает на вычитании ещё до присвоения str3.

#38
16:30, 3 янв. 2016

А так будет падать? :-)

constexpr const std::uintptr_t str3 = str2;
str3 -= str;
#39
16:39, 3 янв. 2016

eMan.Lived
> А так будет падать? :-)
Это уже неконстантное выражение и вообще ошибка - модификация константы.

Страницы: 1 2 3
ПрограммированиеФорумОбщее

Тема в архиве.