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

 
Отсутствует сообщение компилятора об ошибке:
class A {};
void f( const A*& ) {}
void OnStart()
{
    A *a;
    f( a ); //нет ошибки ???
}

А должно быть!

 
fxsaber #:

Предполагаю, что const-объект никогда не может быть создан. const-свойство определяет переменная, которая ссылается (прямая или указатель) на созданный объект.

Если статически можно

const A a;

то и динамически можно

const A *a = new const A;

разницы (в смысле const) нет никакой

 
К тому же в ряде случаев переменная вообще не нужна:
class A {
public:
        void f() const { Print(__FUNCSIG__);}
};
void OnStart()
{
    (new A const).f();
}
 
A100 #:

Если статически можно

то и динамически можно

разницы (в смысле const) нет никакой

Статически тоже нельзя. Объект создается без каких-либо ограничений, а вот переменная, которая на него ссылается, имеет ограничения.

 
A100 #:
К тому же в ряде случаев переменная вообще не нужна:

Нужна для удаления.

 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

A100, 2022.08.22 16:48

Отсутствует сообщение компилятора об ошибке:
class A {};
void f( const A*& ) {}
void OnStart()
{
    A *a;
    f( a ); //нет ошибки ???
}

А должно быть!

Все правильно. По аналогии.

void f( const int& ) {}
void OnStart()
{
  int i = 0;
  
  f(i);
}

const - свойство переменной, а не объекта за ней.

 
fxsaber #:

Все правильно. По аналогии.

const - свойство переменной, а не объекта за ней.

Аналогия неправильная хотя бы по формальному признаку (даже без вникания в детали): у меня *&, а у Вас &

Подсказка: все примеры предварительно в C++ проверил - там не дураки сидят!
 
fxsaber #:

Нужна для удаления.

Это какой то стереотип - вот удалил без переменной:

class A {
public:
   const A *f() const { Print(__FUNCSIG__); return &this; }
};
void OnStart()
{
   delete((new A const).f());
}
 
A100 #:

Аналогия неправильная хотя бы по формальному признаку (даже без вникания в детали): у меня *&, а у Вас &

Никакой разницы.

Подсказка: все примеры предварительно в C++ проверил - там не дураки сидят!

Свою гипотезу объяснил Вам. Авторитетов не имею.

 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

A100, 2022.08.22 17:32

Это какой то стереотип - вот удалил без переменной:

class A {
public:
   const A *f() const { Print(__FUNCSIG__); return &this; }
};
void OnStart()
{
   delete((new A const).f());
}

Временные переменные никто не отменял.

class A {
public:
   const A *f() const { Print(__FUNCSIG__); return &this; }
};
void OnStart()
{
   delete((new A const).f()); // A*
   delete(((const A*)(new A)).f()); // const A* 
   delete((new A).f()); // Почему не ругается компилятор (A* вызывает const-метод) - не знаю.
}