Что означает :: в C ++? [duplicate]

13
задан ladyfafa 13 August 2010 в 21:00
поделиться

5 ответов

void - тип возвращаемого значения. :: - это оператор разрешения области, поэтому это означает, что rev_seq находится внутри области weight_data . weight_data может быть либо пространством имен, либо классом (в зависимости от того, что вы указали, невозможно сказать, какой именно).

25
ответ дан 1 December 2019 в 18:49
поделиться

weight_data - это пространство имен или имя класса.

2
ответ дан 1 December 2019 в 18:49
поделиться

Строка void weight_data :: rev_seq (string & seq) сообщает компилятору, что это определение функции-члена rev_seq (string & seq) из weight_data . Если бы здесь было сказано void rev_seq (string & seq) {...} , компилятор подумал бы, что определяется функция, не являющаяся членом, в отличие от rev_seq (string & seq) функция-член класса weight_data .

class weight_data
{
    void rev_str(string &seq);
}

Это также может означать, что rev_str относится к функции, которая является частью пространства имен weight_data .

namespace weight_data
{
    void rev_str(string &seq);
}
0
ответ дан 1 December 2019 в 18:49
поделиться

Просто подумал о добавлении еще двух интересных вещей о ::

а) Оператор :: является и унарным, и бинарным оператором

struct A{
   int m;
};

int x;
int main(){
   ::x;                     // Unary
   int (A::*p) = &A::m;     // Binary
}

б) $ 10.3 / 12 - "Явная квалификация с оператором области видимости (5.1) подавляет механизм виртуального вызова. "

struct A{
   virtual void f(){cout << 1;}
};

struct B : A{
   void f(){cout << 2;}
};

int x;
int main(){
   B b;
   A &ra = b;
   ra.f();     // dynamic binding, prints 2
   ra.A::f();  // suppress VF mechanism, prints 1.
}
0
ответ дан 1 December 2019 в 18:49
поделиться

В C ++

  • A :: B означает, что B является идентификатором в пространстве имен или класс ] type A ,
  • AB означает, что B является членом struct , class или тип union , на экземпляр которого ссылается объект или ссылка A , а
  • A-> B означает, что B является членом struct , class или union тип, на экземпляр которого ссылается указатель A . (Это эквивалент (* A) .B .)

В некоторых других языках все три случая покрываются . Только .

Обратите внимание, что в C ++ функции-члены не обязательно должны быть реализованы (определены) в определении их класса. (Если да, то они неявно встроены .) Они могут быть и часто реализуются в виде отдельных файлов реализации ( .cpp ). Это имеет то преимущество, что не всем пользователям класса необходимо перекомпилировать при изменении реализации одной из функций-членов класса.Итак, если weight_data не является namespace name, void weight_data :: rev_seq (string & seq) {...} является таким определением члена класса за пределами свой класс.

14
ответ дан 1 December 2019 в 18:49
поделиться
Другие вопросы по тегам:

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