Ошибки, баги, вопросы - страница 1730
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Всё правильно, здесь при типизации, T = A *
Тогда здесь ошибка при компиляции
Именно. Читаю все эти претензии и никак не могу врубиться, где тут проблема. На дискете, что ли, собираетесь хранить эти файлы?
Что, изнашивается диск, когда сохраняете 100-килобайтный файл вместо 50-килобайтного? Самому не смешно? )
А это нормально, что из-за одного символа копирайта (который в принципе является интернациональным и есть во всех кодировках, несмотря на то что его код больше 127) размер файла увеличивается в 2 раза без всякого смысла? Это умно да? Зачем раздувать файлы в 2 раза без надобности?
Проблема не только в размере, но и в контекстном поиске. Пока файлы в ASCII, можно многими сторонними программами, включая файл-менеджеры искать файлы по контекстной строке. Я этим пользуюсь практически каждый день. Родной MQ редактор в этом плане такой же ноль как и во многих других очевидных кодерских вопросах. Как только получаем уникод, с контекстным поиском возникают 2 беды: нельзя искать влоб (как последовательность байтов), т.к. нужно сперва "понять" кодировку, потом нормализовать к единому виду (например, все ASCII на лету кодировать в уникод) и только потом "искать" - не все программы так умеют или хотят делать, а для тех, что умеют получаем пункт 2 - тормоза.
Конечно некоторым проще в довесок к винту прикупить новый комп побыстрее, чем подумать или хотя бы поучиться на примере других продуктов, каким должно быть удобное и эффективное ПО.
Тогда здесь ошибка при компиляции
В С++ тоже неоднозначность типа: const T const
Но выход есть - переставить const вправо
void f1( T const & a[] ) {} //error: 'const' - unexpected token
class A {};
void f2( A const * const & a[] ) {} //нормально
class B {
void g1() const { f1( a ); } //error: 'f1' - cannot to apply function template
void g2() const { f2( a ); } //нормально
A *a[];
};
В С++ тоже неоднозначность типа: const T const
Но выход есть - переставить const вправо
С++ компилирует без ошибок (у учетом разницы синтаксиса)Но логически же странно получается, когда "const A" и "A const" обозначают одно и то же.
Возможно, что "A const *" - это константный указатель не на константный объект.
Похоже, что именно так. Т.к. такая конструкция имеет место быть
void f( const A const * const & a[] ) {}
Нельзя менять указатель, нельзя менять по ссылке и нельзя менять объект(-ы).
С точки зрения получения быстрого кода, такая конструкция может сделать нужную подсказку компилятору?
А это нормально, что из-за одного символа копирайта (который в принципе является интернациональным и есть во всех кодировках, несмотря на то что его код больше 127) размер файла увеличивается в 2 раза...
void f( const A const * & a[] ) {}
менять элементы нельзя, а вот изменять размер массива - вполне.
Прикольно, получается, что методы могут выглядеть так
class B
{
const A const * Method( const A const * const & a[] ) const
{
return(a[0]);
}
};
Возможно, что "A const *" - это константный указатель не на константный объект.
Если не шаблон, то "A const *" равнозначно "const A *", а если шаблон - то по ситуации
{
public:
int i;
};
void f( A const * & a[] )
{
a[0].i = 1; // 'i' - constant cannot be modified
}
Конкретно это - исправили в будущем https://www.mql5.com/ru/forum/1111/page1749#comment_2892563
Если не шаблон, то "A const *" равнозначно "const A *", а если шаблон - по то ситуации (в С++ )
Интересно, что в такой конструкции
void f( const A const * & a[] ) {}
менять элементы нельзя, а вот изменять размер массива - вполне.