Одиночные элементы через статический экземпляр в C++ — в источник или в заголовочные файлы?

Подрывная деятельность еще не имеет первоклассного, переименовывают операции.

на проблеме существует 6-летняя ошибка: http://subversion.tigris.org/issues/show_bug.cgi?id=898

Это рассматривают для 1,6, теперь, когда отслеживание слияния (более высокий приоритет) было добавлено (в 1,5).

8
задан Ivan Vučica 7 September 2009 в 13:01
поделиться

2 ответа

В C ++ ничто не мешает встроенной функции иметь статическую переменную, и компилятор должен сделать так, чтобы эта переменная была общей для всех единиц перевода (как он должен это сделать для создания экземпляра шаблона статические члены класса и статические переменные функции). 7.1.2 / 4

Переменная static во встроенной функции extern всегда ссылается на один и тот же объект.

Обратите внимание, что в C встроенные функции не могут иметь static переменные (не ссылка на объект с внутренней связью).

10
ответ дан 5 December 2019 в 15:25
поделиться

Я попробовал код, который OP опубликовал с VS2008, четырьмя способами, и похоже, что нет проблема со статическим экземпляром MyClass внутри MyClass :: Instance () .

  1. Instance () определяется в MyClass.cpp: это нормальный способ все в порядке.
  2. Instance () определяется только внутри объявление класса. Это альтернатива, и все в порядке.
  3. Instance () определен inline вне класса, но в шапке и все в порядке.
  4. как 3. но без inline и компоновщик говорит, что есть несколько определений Instance ()

Я думаю, что автор книги имеет дело с 4. выше и знает, что статический экземпляр MyClass будет обработан в программе, которая компилируется и связывает.

1
ответ дан 5 December 2019 в 15:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: