Я согласен прямо. Я редко нахожу потребность в составных литералах в C, но ваш синтаксис определенно обоснован. Если я правильно понимаю ваш вопрос, нужно попытаться определить, приводит ли вышеупомянутый адрес оператора к составному литералу в const
против указателя не-const.
Это не константа, если само соединение не является const-квалифицированным. Я не имею C99 стандарта удобного, но самый лучший примером, который я могу всунуть для этого является поучительным примером в:
C11 стандарт §6.5.2.5 p11
только для чтения соединения буквальных могут быть определены с помощью конструкций, таких как:
(const float []){1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6}
в сочетании с описанием квалификации для хранения составных литералов из:
С11 стандартных §6.5.2.5 р5
Значения соединения буквальным является то, что безымянным объект инициализируется список инициализатора. Если составной литерал выходит за пределы тела функции, объект имеет статическую продолжительность хранения; в противном случае он имеет автоматическую продолжительность хранения, связанную с закрывающим блоком.
Таким образом, хранилище также существует (то есть оно не находится где-то в постоянном запоминающем устройстве). Если const
квалифицирован, составной литерал является, по сути, неконстантным (данные/элементы в нем, если массив или структура составного литерала могут, по сути, иметь свою квалификацию const
).
Механика перевода с Type *
на любой void*
или const void*
являются надеемся, очевидно, но стоит отметить какой-затяжка вашего образца:
void SomeFunc(void* p) { printf("%p\n",p); } ;
void SomeFuncConst(const void* p) { printf("%p\n",p); } ;
int main()
{
SomeFunc(&(int){ 12345 }) ; // OK. int* to void*
SomeFuncConst(&(int){ 12345 }) ; // OK. int* to const void*
SomeFuncConst &(const int){12345}); // OK. const int* to const void*
SomeFunc(&(const int){ 12345 }) ; // ERROR. const int* not allowed as void*
}
Учитывая все это, вполне вероятно, я неправильно понял ваш вопрос, и если да, то любезно проясните, как я достигаю ссылки delete.
Да, я пропустил, что у вас есть две функции. – 2501
Да, моя проблема заключалась в преобразовании из типа * и const type * в const void *. – 2501
Думаю, я должен доверять вам на const int * на const void *. – 2501