Почему шаблоны не могут быть внутри extern & ldquo; C & rdquo; блоки?

Как будто вы пытаетесь получить доступ к объекту, который является null. Рассмотрим ниже пример:

TypeA objA;

. В это время вы только что объявили этот объект, но не инициализировали или не инициализировали. И всякий раз, когда вы пытаетесь получить доступ к каким-либо свойствам или методам в нем, он будет генерировать NullPointerException, что имеет смысл.

См. Также этот пример:

String a = null;
System.out.println(a.toString()); // NullPointerException will be thrown
25
задан Community 23 May 2017 в 12:02
поделиться

2 ответа

Что означает, что шаблон «может» иметь связь? Что такое шаблонная связь?

Все имена либо имеют внешнюю связь, внутреннюю связь, либо не имеют связи (C ++ 03 §3.5p2), но это не та же связь, что и языковая связь. (Я знаю, что это сбивает с толку. C ++ 0x также значительно меняет положение вещей с помощью связывания.) Внешнее связывание требуется для всего, что используется в качестве аргумента шаблона:

void f() {
  struct S {};
  vector<S> v;  // Not allowed as S has internal linkage.
}

Обратите внимание, что в C ++ 98 есть "может «в том, что вы цитировали в §14p4, но C ++ 03 удаляет« может », поскольку шаблоны не могут быть объявлены в контексте, который дал бы им внутреннюю связь:

void f() {
  // Not allowed:
  template<class T>
  struct S {};
}
10
ответ дан Fred Nurk 23 May 2017 в 12:02
поделиться

Потому что в C. нет шаблонов.

-4
ответ дан Crazy Eddie 23 May 2017 в 12:02
поделиться
Другие вопросы по тегам:

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