Size: a a a

2020 August 19

P

Pepe 🐸 in pro.cxx
можно пояснить что тут происходит?  В смысле, переменная type_id инстанцируется с шаблонным параметром, потом у нее берется адрес? Но я все равно не понимаю как это работает
источник

P

Pepe 🐸 in pro.cxx
или на какой фиче 17го стандарта это хотя бы основано?
источник

D

Danya in pro.cxx
Pepe 🐸
или на какой фиче 17го стандарта это хотя бы основано?
Variable Template
источник

P

Pepe 🐸 in pro.cxx
спасибо
источник

АК

Александр Караев... in pro.cxx
Pepe 🐸
можно пояснить что тут происходит?  В смысле, переменная type_id инстанцируется с шаблонным параметром, потом у нее берется адрес? Но я все равно не понимаю как это работает
void* a = &a; - тут вопросов нет?
источник

P

Pepe 🐸 in pro.cxx
Александр Караев
void* a = &a; - тут вопросов нет?
есть, я что то пропустил, но а никогда не была задекларирована?
источник

D

Danya in pro.cxx
Pepe 🐸
есть, я что то пропустил, но а никогда не была задекларирована?
Это псевдокод, который показывает, что любой указатель кастится к void*
источник

P

Pepe 🐸 in pro.cxx
Danya
Это псевдокод, который показывает, что любой указатель кастится к void*
это понятно, но вопрос именно как работает тот конкретный код. Кстати void* a = &a; тоже валидно (само по себе)
источник

D

Danya in pro.cxx
Pepe 🐸
это понятно, но вопрос именно как работает тот конкретный код. Кстати void* a = &a; тоже валидно (само по себе)
Тот код работает точно так же + шаблоны переменных
источник

LA

Liber Azerate in pro.cxx
Pepe 🐸
есть, я что то пропустил, но а никогда не была задекларирована?
А void* a что такое?
источник

AP

Alexander Potapov in pro.cxx
Из опыта самое норм это хешировать имя класса как уникальный id
Потому что реально, как только появляются dllки, все ломается
источник

AP

Alexander Potapov in pro.cxx
Хуже только static поля в шаблонных классах
источник

P

Pepe 🐸 in pro.cxx
Liber Azerate
А void* a что такое?
в общем вопрос в том как адрес а взять.
источник

LA

Liber Azerate in pro.cxx
Pepe 🐸
в общем вопрос в том как адрес а взять.
Я, конечно, никогда не пробовал... Но судя по всему здесь извращение из серии "область видимости имени начинается в точке объявления, точнее, сразу после декларатора, но перед инициализирующим выражением"
источник

АК

Александр Караев... in pro.cxx
Pepe 🐸
в общем вопрос в том как адрес а взять.
этот код эквивалентен следующему:
void* a = nullptr;
a = &a;
источник

P

Pepe 🐸 in pro.cxx
спасибо, похоже я не понимал как декларации работают. Оказывается можно сделать int a = a даже
источник

LA

Liber Azerate in pro.cxx
Pepe 🐸
спасибо, похоже я не понимал как декларации работают. Оказывается можно сделать int a = a даже
Ну я об этом и говорил. Это, кстати, настоящий вопрос уровня супы
источник

P

Pepe 🐸 in pro.cxx
да, понял
источник

АК

Александр Караев... in pro.cxx
Pepe 🐸
спасибо, похоже я не понимал как декларации работают. Оказывается можно сделать int a = a даже
а вот это уже посложнее:

struct A { int field; };

A a{ std::move(a) };


Где-то даже был пропозал, который не приняли, потому что он ломал подобный код. Вроде бы речь про ultimate copy elision
источник

P

Pepe 🐸 in pro.cxx
Александр Караев
а вот это уже посложнее:

struct A { int field; };

A a{ std::move(a) };


Где-то даже был пропозал, который не приняли, потому что он ломал подобный код. Вроде бы речь про ultimate copy elision
и это не уб? Не уверен что а инициализирована (как и в оригинальном коде)
источник