окровавленные детали в 3.4.3 Квалифицированный поиск имен из спецификации C++ (с 3.3.1 декларативных регионов и прицелы и 5.1.1 (Первичные выражения) Общие также обеспечивая некоторую полезную информацию.)
кипятить его, хотя оба пространства имен и классы «декларативные регионы», так что в вашем примере, std::cout
относится к имени cout
в декларативной области под названием std
и MyClass::foo
относится к имени foo
в декларативной области назван MyClass
. Что касается оператора ::
, то пространства имен и классы являются «тем же самым видом».
Кроме того, поскольку имена должны быть уникальными в пределах декларативной области (включая глобальное пространство имен), следующий код неверен:
//invalid code - does not compile
namespace test { int x; }
class test { static int x; };
Другими словами, нет никакой неоднозначности между test::x
со ссылкой на х в пространстве имен или в классе x.
Для вашего первого вопроса, в примерах, которые вы показываете, речь идет о контексте. Ваш второй вопрос - это способ, чтобы объяснить здесь на SO, и будет трудно сделать с кем-либо, не зная о том, как работают компиляторы. –
Есть ли случай, когда мы используем функцию класса без создания экземпляра объекта как java? –
Только функции 'static'. –