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

 
Aleksey Vyazmikin:

Ясно. Это конечно плохо, терминал должен был бы позаботится об этом и скачать актуальные версии из Маркета, при этом попросив подтверждения своим действиям.

Об этом пишется на форуме. С предупреждением, что не будут доступны программы из маркета после обновления на Win 1903, и что их нужно будет скачать ещё раз. И самое главное, что всем купившим добавлено по одной активации в связи со всем этим.

 
Artyom Trishkin:

Об этом пишется на форуме. С предупреждением, что не будут доступны программы из маркета после обновления на Win 1903, и что их нужно будет скачать ещё раз. И самое главное, что всем купившим добавлено по одной активации в связи со всем этим.

Если я пользователь программы, то вовсе не обязательно, что буду посещать форум...

Да и речь скорей о дружественном подходе для пользователя, а не о наличии или отсутствии формальных уведомлений.

 
Написал ошибочный код, но он компилируется
class A
{
public:
  virtual bool Func() { return(true); }
};

class B : public A
{
public:
  virtual bool Func() { return(false); }
};

class C
{
  A* obj; // Этот вариант по какой-то причине компилируется без ошибок.
//  A  obj; // Здесь правильная ошибка компиляции, но их две!
//  B  obj; // Здесь полная ерунда в ошибках и предупреждениях (expression not boolean).
  bool f() const { return(this.obj.Func()); }
};

Если использовать другие строки в исходниках, то там ошибки левые.
 
2093
Похожая ситуация из соседней темы ООП, с заведомо допущенной ошибкой.
При запуске в отладчике, поднимается исключение отладчика. Всё гуд.
А при компиляции, компилятор не какого исключения не поднимает.
class CObj
{
   public:
   int f(){return(33);}
};

//+------------------------------------------------------------------+
void z(CObj &o)    //тут специально пропущен указатель
{
   o = new CObj();
   Print(o.f());
}

CObj * obj;

//+------------------------------------------------------------------+
void OnStart()
{      
  z(obj);
  delete(obj);
}
 
Выравнивание не работает
struct A pack(4)
{
  short j;
};

void OnStart()
{
  Print(sizeof(A)); // 2
}
 
fxsaber:
Выравнивание не работает

В таком случае имхо и не должно. это же выравнивание а не добивка до кратного размера

 
Andrei Trukhanovich:

В таком случае имхо и не должно

Почему здесь размер не должен быть кратен четырем?

Оказывается, и классы могут выравниваться.

 
fxsaber:

Почему здесь размер не должен быть кратен четырем?

Оказывается, и классы могут выравниваться.

потому что это внутреннее выравнивание. следующая внешняя переменная скорее всего будет размещена с выравниванием 8 вне зависимости от размера структуры.

 
Andrei Trukhanovich:

потому что это внутреннее выравнивание

Тогда боюсь, смысл выравнивания теряется

struct A pack(4)
{
  short j;
};

void OnStart()
{
  Print(sizeof(A)); // 2
  
  const int handle = FileOpen(__FILE__, FILE_WRITE | FILE_BIN);
  
  if (handle != INVALID_HANDLE)
  {
    A a = {0};
    
    FileWriteStruct(handle, a);
    Print(FileTell(handle)); // 2
    
    FileClose(handle);
  }
}
 
fxsaber:

Тогда боюсь, смысл выравнивания теряется

смысл выравнивания в том, чтобы адреса внутренних переменных были кратны выравниванию.