« first day (769 days earlier)      last day (2434 days later) » 

10:16 AM
Смотрю последний абзац ответа и что-то не понимаю: почему адрес массива известен на момент компиляции, а не линковки (так же как для строкового литерала)?
@Abyx есть ответ? ^
 
хороший вопрос
давайте посмотрим
 
Давайте. Куда смотреть-то будем?
 
я не знаю как это работает
м...
а, я понял
там a это плейсхолдер
и его можно использовать в шаблонах
во время линковки туда запишется реальный адрес.
однако с этим плейсхолдером нельзя ничего сделать во время компиляции, например внутри f нельзя написать constexpr long x = (long)A;
 
10:44 AM
Так всё же во время линковки, а не компиляции! Ну и получается тогда, что строковый литерал тоже мог бы использоваться. Ну или хотя бы указатель, который на него указывает.
 
11:21 AM
@alexolut не, строковый литерал это не l-value. он не ORD-used
 
@Abyx пусть так, но указатель-то lvalue: const char* p = "blablabla";
Но вообще я сейчас о времени подсовывания адреса в аргумент шаблона.
 
реальный адрес подсовывается вообще в ран-тайме, когда программа в памяти
если вообще в бинарнике будет адрес. там может быть смещение, и адрес будет вычисляться
 
но известен то он уже во время линковки, как и для массивов. Собственно, с чего всё и началось обсуждение.
 
@alexolut не
 
почему?
 
11:30 AM
во-первых есть абсолютная адресация, и относительная. если используется относительная, то в бинарнике не будет абсолютных адресов - будут смещения например от IP
и абсолютные адреса будут вычисляться в ран-тайме
во-вторых, абсолютные адреса в бинарнике на диске не совпадают с адресами в памяти
.
....
во время компиляции нам известен один адрес - адрес плейсхолдера в объектнике
во время линковки нам известен другой адрес - адрес в бинарнике
во время исполнения будет реальный адрес в памяти
 
Это всё хорошо, но не отражает ситуацию, почему `s` подходит как аргумент для шаблона, а `p` - нет:
`char s[] = "text";
const char* p = "text";
template <const char*> class C {};`
 
@alexolut потому что p вычисляется в ран-тайме, это абсолютный адрес
там магия
указатели, которые не адреса
 
@Abyx s тоже абсолютный адрес, если говорить об указателе на первый элемент, в которой он распадается (decay).
@Abyx вот хотелось бы чтоб "там магия" звучало пореже :) особенно в ответах
 
@alexolut decay происходит в ран-тайме
скандалы-интриги-расследования
еще раз. допустим у нас абсолютные адреса
в объектнике будет `mov eax, 666` и в таблице внешних ссылок 666: массив_a
в слинкованном бинарнике будет `mov eax, 400777h`
в памяти будет `mov eax, 3000777h`
и вот когда мы пишем extern int a[]; X<&a> , то в объектнике в параметр шаблона будет равен 666, и т.д.
ну или со строками
 
11:51 AM
Ок. Литерал не может лежать по адресу 666?
 
у литерала нет адреса пока он не материализуется.
ок
при абсолютной адресации у литерала будет адрес 666
мог бы быть
но у литерала внутренее связывание
м... хотя это не важно
 
да, связывание теперь уже не важно, главное, чтоб было какое-то.
 
но вообще у литерала нет адреса
если у литерал 1 это не переменная int _ = 1, то почему мы ожидаем что у строкового литерала есть адрес
 
у литерала нет имени, а адрес вполне себе есть.
 
нету
 
12:00 PM
у строкового есть
 
char s[] = "ttt";
это может быть mov [s], 'ttt'
 
если мы хотим чтобы он был, т.е. используем в контексте, где нужен адрес.
как там что соптимизирует компилятор - это уже другое дело
 
не, это не оптимизация
еще раз
int x = 1 это mov [x], 1
char s[] = "ttt"; это mov [s], 'ttt'
у литерала нет адреса
и литерал не хранится в памяти
 
если я пишу const char* p = "ttt", то p содержит адрес литерала, например, мы можем его вывести на консоль.
 
да, но p вычисляется в ран-тайме
 
12:09 PM
пусть вычисляется, но в линктайме могло бы использоваться то же самое, что используется и для массива в шаблоне. Пусть это будет не адрес рантайма, но он тем не менее есть (может быть, если бы разрешили использовать p в шаблоне).
 
пишите пропозал
 
уф. хорошо что договорились :)
@Abyx кстати, по теме чата, можно ли сюда прикрутить Feed популярных вопросов? Правда надо только свежие, а не всю историю ruSO.
 
можно попробовать
а что считать популярными?
 
я в основном чате написал Николаю
in Stack Overflow на русском, 1 min ago, by alexolut
@NicolasChabanovsky можно ли как-то получить RSS популярных и новых вопросов по метке? Т.е. примерно то, что публикуется в твиттер, но с фильтрацией по метке.
@CppStack
StackOverflow feed of C++ questions matching certain criteria.
3.3k tweets, 8.4k followers, following 9 users
 
12:24 PM
[c++] or [visual-c++] or [c++builder] or [c++11] or [c++-cli] or [c++14] or [c++-faq] or [devc++] or [c++17] or [borland-c++] or [c++builder-xe] or [vc++2015] or [c++98]
это метки [*c++*]
 
Надо ограничить чтобы только новьё было ...
 
вот лента новых
но они там весьма часто
надо бы отсеять вопросы с маленьким рейтингом, но лента работает только на теги
можно бота написать
 
12:41 PM
в общем, надо поспрашать на MSE или enSO.meta
 
1:21 PM
Abyx has made a change to the feeds posted into this room
Abyx has made a change to the feeds posted into this room
Abyx has made a change to the feeds posted into this room
 

« first day (769 days earlier)      last day (2434 days later) »