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

 
Koldun Zloy:

Нелогично. Если Вы не собираетесь её изменять, это ещё не значит, что нужно делать const. Достаточно сделать переменную закрытой.

Было бы логично, если бы Вы благодаря этому что-то получили. Но Вы только создали себе проблему.

const - это дополнительный контроль. Иначе можно было бы вообще не вводить эту директиву в язык.


public const-поле хорошо тем, что оно НАПРЯМУЮ (можно передавать по ссылке) доступно для чтения. Но ошибочное его изменение исключается.


Мне const очень помогают при написании программ. Это первый случай, когда возникла проблема.


ЗЫ Еще помогает использование this и :: там, где могут не писаться.

 
fxsaber:

const - это дополнительный контроль. Иначе можно было бы вообще не вводить эту директиву в язык.


public const-поле хорошо тем, что оно НАПРЯМУЮ (можно передавать по ссылке) доступно для чтения. Но ошибочное его изменение исключается.


Мне const очень помогают при написании программ. Это первый случай, когда возникла проблема.


ЗЫ Еще помогает использование this и :: там, где могут не писаться.

Сделайте переменную закрытой. Для чтения используйте функцию. Передавать по ссылке const int незачем.

 
Koldun Zloy:

Сделайте переменную закрытой. Для чтения используйте функцию. Передавать по ссылке const int незачем.

Вы предлагаете const просто игнорировать.

 
fxsaber:

Вы предлагаете const просто игнорировать.

Нет. Но в этом конкретном случае он не нужен.

 
Блин, на пустом месте проблема придумывается. "Мыши плакали, кололись, но продолжали грызть кактус".
 
fxsaber:

поэкспериментировал, в общем тут как не крути, любое решение будет "ущербным"

если речь идет о скорости выполнения и о контроле доступа к полю структуры, то можно написать некрасивое решение, но выполняющее задачу

я б вообще отказался от статических методов в структуре - в них просто смысла нет, код все равно будет запутанным и не логичным

выглядит примерно так:

int tmp[] = {1,2,3,99};
struct A
{
private:
   static int count;
public:
   const int a;
   A():a(tmp[count++]) {}
};
static int A::count = 0;
//+------------------------------------------------------------------+
void OnStart()
{
   A a[ArraySize(tmp)];
   for(int i=0;i<ArraySize(a);i++) Print(a[i].a);
}


 ....да и счетчик  count тож не нужен, нужно, по сути, обернуть A a[ArraySize(tmp)]; в макроподстановку которая  создаст массив структур и удалит временный массив tmp

 

Есть две программы, работающие одновременно с одним и тем же файлом. Та, что записывает, использует флаги FILE_READ|FILE_WRITE|FILE_BIN|FILE_SHARE_READ. Та, что читает - FILE_READ|FILE_BIN|FILE_SHARE_WRITE|FILE_SHARE_READ. Несмотря на то, что первая программа периодически сохраняет файл с помощью FileFlush, вторая видит длину файла только на момент открытия. Пробовал делать FileSeek взад-вперед - не помогает.

Вопрос: как сделать, чтобы программа, читающая файл, подхватывала дозаписываемые данные?

 

Обобщу:

struct A {
    const int a; 
    A() {}
};
void OnStart()
{
            A a1; //(1) нормально
    const int a2; //(2) Error: 'a2' - 'const' variable must be initialized
}

А какая разница между 1 и 2 ?

 
A100:

Обобщу:

А какая разница между 1 и 2 ?

была надежда, что есть некий встроенный механизм для инициализации этого случая, но нет там ничего

struct A {
    const int a[10]; 
    A() {ArrayPrint(a);} //-396985669       32758 -1490812928       32757  2147360768           0 -1681390008         493           0           0

};
//+------------------------------------------------------------------+
void OnStart()
{
  A a1;
}
//+------------------------------------------------------------------+

ЗЫ:  тут компилятор видит

void f()
{
   const int x;  //'x' - 'const' variable must be initialized
}
 
Igor Makanu:

была надежда, что есть некий встроенный механизм для инициализации этого случая, но нет там ничего

ЗЫ:  тут компилятор видит

Такого случая в принципе быть не должно - вопрос должен был быть решен еще на уровне компилятора (как в C++). А тут получается вроде как можно и как следствие обсуждение на несколько страниц