0

在完成标准 c++ 教程后,我正在尝试做一些 hello world 的事情。我尝试做的第一件事是在没有窗口的情况下直接在屏幕上绘图。我发现了这个并且它有效。

#include "stdafx.h"
#include <Windows.h>
#include <iostream>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    HDC screenDC = ::GetDC(0);
    ::Rectangle(screenDC, 200, 200, 300, 300);

    int exit; cin >> exit;
    return 0;
}

在此处输入图像描述

但是在标准 c++ 教程中没有任何地方涵盖这样的内容

HDC screenDC = ::GetDC(0);
::Rectangle(screenDC, 800, 200, 300, 300);

Rectangle 是什么成员?


如果你不介意我还有其他一些可能很简单的问题。如果没有,请不要担心。

4

4 回答 4

9

::是范围解析运算符。

scope::name表示使用在名为 的类或命名空间中声明的名称scope

::name表示使用在全局命名空间中声明的名称。通常,它是可选的;但有时如果当前范围内还有其他同名的东西,你需要它。

于 2013-05-14T17:23:39.067 回答
7

::像这样访问全局命名空间。它是命名空间解析。如果你愿意,你可以把::它们扔掉,它们是多余的。

于 2013-05-14T17:22:40.230 回答
2

::是范围解析运算符。::Identifier将引用全局命名空间中的任何内容。然而,这并不总是必要的。只有在不使用它会导致歧义时才真正需要它:

int i = 0;

void func() {
    int i = 0;

    ::i = 1; // This will set the global i
    i = 1; // This will set the local i
}

(注意:我不以任何方式支持全局变量)

于 2013-05-14T17:25:04.250 回答
1

:: 用于访问类或命名空间中的内容。(或者在这种情况下,不是。)

因此,如果您有一个带有静态方法 bar 的类 Foo 您可以这样调用它 Foo::Bar();

此外,如果您有一个带有函数 PrintPrettyThings 的命名空间 MyLibrary,您可以这样调用它: MyLibrary::PrintPrettyThings();

如果你在某个地方有另一个函数 Bar 并且你在 Foo 的一个方法中,你可以使用它 ::Bar();来调用 Foo 之外的 Bar,否则你只会调用 Foo::Bar。

于 2013-05-14T17:25:38.777 回答