Подтвердить что ты не робот

С++: что такое:: for?

Если вы перейдете к принятому ответу этого сообщения

Может кто-нибудь прокомментировать, почему он использует:

double temp = ::atof(num.c_str());

а не просто

double temp = atof(num.c_str());

Также, считается хорошей практикой использовать этот синтаксис, когда вы используете "чистые" глобальные функции?

4b9b3361

Ответ 1

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

Посмотрите Википедия на эту тему:

#include <iostream>

using namespace std;

int n = 12;   // A global variable

int main() {
    int n = 13;   // A local variable
    cout  << ::n << endl;  // Print the global variable: 12
    cout  << n   << endl;  // Print the local variable: 13
}

Ответ 3

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


Из С++ Primer, 4-е издание, раздел 17.2.1:

"Имена, определяемые глобальными именами областей, объявленными вне любого класса, функции или пространства имен, определяются внутри глобального пространства имен. Глобальное пространство имен объявлено неявно и существует в каждой программе. Каждый файл, который определяет сущности в глобальной области, добавляет те имена в глобальное пространство имен.

Оператор области может использоваться для обращения к членам глобального пространства имен. Поскольку глобальное пространство имен неявно, оно не имеет имени; обозначение

::member_name

относится к члену глобального пространства имен. "

Ответ 4

Предположим, что у вас есть две версии функции f(), определенные за пределами пространства имен, и одна из них определена внутри. Теперь предположим, что у вас есть еще одна функция g() в том же пространстве имен. Теперь, если вы сделаете f() внутри g(), он вызовет тот, который определен в том же пространстве имен. Но если вы хотите вызвать глобальную версию, вам нужно сделать ::f()

Ответ 5

Оператор:: оператор - оператор разрешения области.

когда используется с спецификатором класса как A:: a, он должен получить доступ к memeber a a класса A. при использовании без какого-либо спецификатора, он получает глобальную переменную.

Он используется главным образом в следующих конкурсах.

  • Чтобы ссылаться на глобальные переменные.
  • Чтобы ссылаться на статические члены класса
  • Чтобы избежать двусмысленности, когда класс наследуется от нескольких [не виртуальных базовые] классы.
  • С помощью директивы использовать функции базового класса в производном классе, когда в базовом классе есть функция с именем, аналогичным имени производного класса, но для другого типа.
  • Чтобы получить доступ к функциям, определенным в глобальной области, когда у вас есть функция, определенная с той же сигнатурой, что и в double temp =:: atof (num.c_str());
  • Чтобы создать объекты вложенных классов.