Что означает «константный класс»?

После некоторого рефакторинга поиска и замены 9X_cxx я получил этот гем:

const class A
{
};

Что означает "константный 9X_cpp класс"? Кажется, компилируется нормально.

42
0
5
Общее количество ответов: 5

Ответ #1

Ответ на вопрос: Что означает «константный класс»?

const в этом примере не имеет смысла, и ваш компилятор 9X_non-const должен выдать вам ошибку, но если вы используете 9X_non-const его для объявления переменных этого класса 9X_cxx между закрывающими } и ;, то это определяет 9X_cpp эти экземпляры как const, например:


const class A
{
public:
    int x, y;
}  anInstance = {3, 4};

// The above is equivalent to:
const A anInstance = {3, 4};

53
3

  • 7.1.5.1/1: «Есть два cv-квалификатора, const и volatile. Если cv-qualifier появляе ...

Ответ #2

Ответ на вопрос: Что означает «константный класс»?

Что означает "константный класс"? Кажется, компилируется 9X_constant нормально.

Не для меня. Я думаю, ваш компилятор 9X_const просто вежлив и игнорирует это.

Изменить: Да, VC++ молча 9X_cpp игнорирует константу, жалуется GCC.

36
1

  • Я собираюсь сказать, что это похоже на к ...

Ответ #3

Ответ на вопрос: Что означает «константный класс»?

Если бы у вас было это:

const class A
{
} a;

Тогда это явно означало 9X_const бы, что 'a' - это константа. В противном 9X_c++ случае я думаю, что это скорее всего недопустимый 9X_c++ c ++.

22
0

Ответ #4

Ответ на вопрос: Что означает «константный класс»?

Это бессмысленно, если вы не объявите экземпляр 9X_classes класса позже, как в этом примере:

const // It is a const object...
class nullptr_t 
{
  public:
    template
      operator T*() const // convertible to any type of null non-member pointer...
    { return 0; }

    template
    operator T C::*() const   // or any type of null member pointer...
    { return 0; }

  private:
    void operator&() const;  // Can't take address of nullptr

} nullptr = {};

Промежуточная 9X_cxx реализация nullptr, если вы ждете C++ 0x.

10
0

Ответ #5

Ответ на вопрос: Что означает «константный класс»?

Попробуйте скомпилировать его с помощью 9X_non-const GCC, появится ошибка ниже:
error: qualifiers can only be specified for objects and functions.

Как видно из 9X_non-const ошибки, постоянными могут быть только объекты 9X_class (переменные, указатели, объекты классов 9X_constants и т. д.) и функции. Поэтому попробуйте сделать 9X_const объект постоянным, тогда он должен нормально 9X_constants компилироваться.
const class A {};
const A a ;

1
0