Ошибки, баги, вопросы - страница 1730

 
A100:

В С++ тоже неоднозначность типа: const T const

Но выход есть - переставить const вправо

С++ компилирует без ошибок (у учетом разницы синтаксиса)

Но логически же странно получается, когда "const A" и "A const" обозначают одно и то же.

Возможно, что "const *"  - это константный указатель не на константный объект.

Похоже, что именно так. Т.к. такая конструкция имеет место быть

class A {};
void f( const A const * const & a[] ) {}

Нельзя менять указатель, нельзя менять по ссылке и нельзя менять объект(-ы).

С точки зрения получения быстрого кода, такая конструкция может сделать нужную подсказку компилятору?

 
Stanislav Korotky:

А это нормально, что из-за одного символа копирайта (который в принципе является интернациональным и есть во всех кодировках, несмотря на то что его код больше 127) размер файла увеличивается в 2 раза...

Да. Хоть убейте, не вижу смысла в этой экономии на спичках.
 
Интересно, что в такой конструкции
class A {};
void f( const A const * & a[] ) {}

менять элементы нельзя, а вот изменять размер массива - вполне.

Прикольно, получается, что методы могут выглядеть так

class A {};
class B
{
  const A const * Method( const A const * const & a[] ) const
  {
    return(a[0]);
  }
};
 
fxsaber:

Возможно, что "const *"  - это константный указатель не на константный объект.

Если не шаблон, то "A const *" равнозначно "const A *", а если шаблон - по то ситуации (в С++ )
 
A100:
Если не шаблон, то "A const *" равнозначно "const A *", а если шаблон - то по ситуации 
Так не должно быть равнозначности. MQL считает это равнозначным, однако
class A
{
public:
  int i;
};

void f( A const * & a[] )
{
  a[0].i = 1; // 'i' - constant cannot be modified
}
По-моему, здесь ошибка. Т.к. передается массив константных указателей (const *), а не массив указателей на константные объекты (const A).
 
A100:
Конкретно это - исправили в будущем https://www.mql5.com/ru/forum/1111/page1749#comment_2892563
Тогда равнозначности не должно быть в Вашем утверждении
A100:
Если не шаблон, то "A const *" равнозначно "const A *", а если шаблон - по то ситуации (в С++ )
 
fxsaber:
Интересно, что в такой конструкции
class A {};
void f( const A const * & a[] ) {}

менять элементы нельзя, а вот изменять размер массива - вполне.

Серьезно? Жесть, не должно быть так.
 
Комбинатор:
Серьезно? Жесть, не должно быть так.
Так логично же.
 
fxsaber:
Тогда равнозначности не должно быть в Вашем утверждении
Да, исправили другое. В Вашем случае ошибка выдаваемая компилятором - обоснована (в силу указанной равнозначности)
 
const A const * Method( const A const * const & a[] ) const
Второй const в состоянии на что-либо повлиять? Что-то в голову такой пример не приходит.