Russian Qt Forum
Ноябрь 23, 2024, 14:41 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: wtf is *this?  (Прочитано 4107 раз)
CuteBunny
Гость
« : Август 28, 2012, 14:34 »

Привет, всем!

Есть код:
Код
C++ (Qt)
#include <iostream>
 
class A {
public:
      void f();
};
 
void A::f()
{std::cout << "wtf?!\n";}
 
int main()
{
    A *a;
    a->f();     //?
}
 

Почему в данном случае, ничего криминального нету в том, что a - у нас неинициализированная локальная переменная и более того мы вызываем метод f()? На msvc2010 в релизе собирается, запускается, проверил еще и в ideone.com.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #1 : Август 28, 2012, 14:38 »

MSVC (во всяком случае 2008) варнингов сыпет много, но не тех что надо. Порядочный компилятор (icc/gcc) скажет типа "used before been initialized"
Записан
mutineer
Гость
« Ответ #2 : Август 28, 2012, 14:40 »

А что криминального должно случиться? Метод к данным объекта не обращается, выполняясь независимо от this, значит ему без разницы чему этот самый this равен
Записан
CuteBunny
Гость
« Ответ #3 : Август 28, 2012, 14:41 »

MSVC (во всяком случае 2008) варнингов сыпет много, но не тех что надо. Порядочный компилятор (icc/gcc) скажет типа "used before been initialized"

Да у меня даже debug не собрался, вылетело с assert'ом... А в релизе все ок...

http://ideone.com/Q54sP - вот из ideone.com на g++
Записан
CuteBunny
Гость
« Ответ #4 : Август 28, 2012, 14:43 »

А что криминального должно случиться? Метод к данным объекта не обращается, выполняясь независимо от this, значит ему без разницы чему этот самый this равен

Все понятно, тогда, спасибо!:) Я понял:)
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #5 : Август 28, 2012, 16:01 »

студия вообще много чего кушает и не давится в отличие от gcc или clang например
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
andrew.k
Гость
« Ответ #6 : Август 28, 2012, 16:33 »

а какое слово маскирует звездочка в сабже? Улыбающийся
Записан
ecspertiza
Супер
******
Offline Offline

Сообщений: 1053


С уважением, мастер конфетного цеха!


Просмотр профиля
« Ответ #7 : Август 28, 2012, 17:28 »

попробовал на гцц для интересу http://liveworkspace.org/code/8d4400797f8502f7bc859358838039fa Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.217 секунд. Запросов: 23.