При завершении функции деструктор является последним методом, который будет выполнен. Деструктор для объекта ob вызывается после того, как значение i скопировано в возвращаемое значение функции. Таким образом, прежде чем деструктор сможет изменить значение i на 10, будет скопировано текущее значение i, и, следовательно, на выходе будет i = 3.
  Значение :: x равно 1. Оператор :: при использовании с именем переменной всегда ссылается на глобальную переменную.
  Автор статьи описывает свои приключения программирования игрового движка на C++.
https://proglib.io/w/c10031e4
  
  https://proglib.io/w/c10031e4
Medium
  
  Using C++ as a game engine scripting language
  Using C++ as a game engine scripting language.
  Библиотека C/C++ разработчика | cpp, boost, qt pinned «В каком городе вы живете?»
  Что выведет программа?
  Anonymous Quiz
    60%
    Compiler Error
      
    12%
    cin+мусорное значение
      
    20%
    cin+введенное число
      
    6%
    Runtime Error
      
    3%
    Ничего из этого
      
    