Подрывная деятельность еще не имеет первоклассного, переименовывают операции.
на проблеме существует 6-летняя ошибка: http://subversion.tigris.org/issues/show_bug.cgi?id=898
Это рассматривают для 1,6, теперь, когда отслеживание слияния (более высокий приоритет) было добавлено (в 1,5).
В C ++ ничто не мешает встроенной функции иметь статическую переменную, и компилятор должен сделать так, чтобы эта переменная была общей для всех единиц перевода (как он должен это сделать для создания экземпляра шаблона статические члены класса и статические переменные функции). 7.1.2 / 4
Переменная
static
во встроенной функцииextern
всегда ссылается на один и тот же объект.
Обратите внимание, что в C встроенные функции не могут иметь static переменные (не ссылка на объект с внутренней связью).
Я попробовал код, который OP опубликовал с VS2008, четырьмя способами, и похоже, что нет проблема со статическим экземпляром MyClass
внутри MyClass :: Instance ()
.
Instance ()
определяется в
MyClass.cpp: это нормальный способ
все в порядке. Instance ()
определяется только внутри
объявление класса. Это
альтернатива, и все в порядке. Instance ()
определен inline
вне класса, но в шапке
и все в порядке. inline
и
компоновщик говорит, что есть несколько определений
Instance ()
Я думаю, что автор книги имеет дело с 4. выше и знает, что статический экземпляр MyClass будет обработан в программе, которая компилируется и связывает.