Заявление от стандарта ISO $ 3.1: 1-й балл от n3242 doc - PullRequest
2 голосов
/ 31 марта 2011

Заявление по стандарту ISO $ 3.1: 1-е очко

n3242 Говорит:

Декларация (пункт 7) может ввести одно или несколько имен в перевод единицы или переименование имен введено предыдущими декларациями. Если так, то в декларации указывается интерпретация и атрибуты этих имена. Декларация также может иметь эффекты в том числе: - статическое утверждение (пункт 7), - управление созданием шаблона (14.7.2), - использование атрибутов (пункт 7) и - ничего (в случае пустой декларации).

ISO 2003 DOC говорит:

Объявление (пункт 7) вводит имена в единицу перевода или
переименовывает имена, введенные предыдущие декларации. Декларация
определяет толкование и атрибуты этих имен.

Может кто-нибудь объяснить, в чем разница.

Они сказали: «Декларация также может иметь следующие эффекты:» ... Может кто-нибудь объяснить, каковы эти эффекты с точки зрения программирования

Пожалуйста, объясните эти эффекты в программировании (с примером программы)?

1 Ответ

3 голосов
/ 31 марта 2011

Я считаю, что некоторые новые функции изменили способ работы объявления - в мельчайших деталях.

Например, это не только вводит некоторые имена, но также влияет на компиляцию кода.

struct A
{
  int x;
};

struct B
{
    A  a;
    static_assert(sizeof(a) > 10, "Wrong member size");
};

У нас также есть пустое объявление (которое, я полагаю, может использоваться только внутри класса) :

struct C
{
  void f()
  { };      // Semicolon here is allowed, but is an empty declaration
};

Пустое объявление - это объявление, которое не вводит имя (потому что оно пустое).

Выяснил также "влияет на создание шаблона", я думаю:

template<class T>
class X
{
   // some members
};

extern template class X<int>;
extern template class X<char>;

Сообщает компиляторучто X<int> и X<char> будут созданы где-то еще и не должны генерироваться здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...