Size: a a a

cxx.Дискуссионная

2021 October 23

ПК

Паша Калугин... in cxx.Дискуссионная
А, видимо нулю и над void* запрещена арифметика
источник

ПК

Паша Калугин... in cxx.Дискуссионная
Логично
источник

ПК

Паша Калугин... in cxx.Дискуссионная
можно ли кастовать в войд?
источник

ПК

Паша Калугин... in cxx.Дискуссионная
почему, если нельзя?
источник

ПК

Паша Калугин... in cxx.Дискуссионная
это же легальный метод zero-cost расширения лайфтайма объекта вроде
источник

ПК

Паша Калугин... in cxx.Дискуссионная
сохранить объект как rvalue ref на void
источник

ES

Eyed Shovel in cxx.Дискуссионная
Можно, но значение выражения будет discarded. Это используется, чтобы убрать варнинги компилятора о unused variable. Переменную типа void создать нельзя. А указатель void* может указывать на любую переменную
источник

ES

Eyed Shovel in cxx.Дискуссионная
Ссылки должны инициализироваться при объявлении. Не совсем понимаю, как ты собрался это сделать
источник

ES

Eyed Shovel in cxx.Дискуссионная
И даже если собрался, то максимум, что ты сможешь - void*&&. А это лайфтайм не продлит
источник

ПК

Паша Калугин... in cxx.Дискуссионная
Про void* знаю. Непонятно, почему нельзя переменную void создать.
источник

ПК

Паша Калугин... in cxx.Дискуссионная
Ну в смысле, понятно, что из-за стандарта, но зачем стандарт такой...
источник

ES

Eyed Shovel in cxx.Дискуссионная
Указатель - хранитель адреса области памяти. Размер адреса для всех объектов одинаков. Т.е. sizeof(int*)=sizeof(char*)=sizeof(указатель на любой объект). Поэтому и существует void*. При этом, его нельзя разыменовать, потому что что дальше с ним делать? Какой это тип? Как с ним обращаться? Вообще, void* - это наследие C. Потому что malloc абсолютно плевать, для чего тебе нужна область в памяти, он выделяет и возвращает тебе безликий указатель (void*). А дальше решай сам, приводи сам к нужному типу
источник

G

GNU/Плюшка in cxx.Дискуссионная
Потому что тип void представляет собой пустое множество значений
источник

ES

Eyed Shovel in cxx.Дискуссионная
А переменная - это именованная область памяти. И она имеет свой размер. И равенство выше с типами уже не прокатит. Банально на моём компиляторе:
sizeof(int) = 4
sizeof(char) = 1
sizeof(long) = 8
Ты хочешь переменную типа void, которой можно присвоить что угодно. Но если ты хочешь предложить комитету внести в стандарт переменные типа void, сначала ответь на вопрос, какой размер должна иметь эта переменная, чтобы ей можно было присвоить любой пользовательский тип
источник

ПК

Паша Калугин... in cxx.Дискуссионная
И что? Почему нельзя кастовать в ничего?
источник

ПК

Паша Калугин... in cxx.Дискуссионная
0, разумеется
источник

ПК

Паша Калугин... in cxx.Дискуссионная
Чару же можно присваивать инт
источник

ПК

Паша Калугин... in cxx.Дискуссионная
Тип void. Обращаться — как с любым другим типом, присваивать, возвращать из функции, передавать в аргументы функции.
источник

G

GNU/Плюшка in cxx.Дискуссионная
как передать ничего?
источник

G

GNU/Плюшка in cxx.Дискуссионная
или возвратить?
источник