在声明一个对象后,这意味着什么?

时间:2013-05-14 17:20:47

标签: c++

我在完成the standard c++ tutorial后尝试做一些你好世界的事情。我尝试做的第一件事是直接在没有窗口的屏幕上绘图。我发现this并且它有效。

#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;
}

enter image description here

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

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

什么是Rectangle成员?


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

4 个答案:

答案 0 :(得分:9)

::是范围解析运算符。

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

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

答案 1 :(得分:7)

这样的

::访问全局命名空间。它是命名空间解析。如果你愿意,你可以放弃那些::,它们是非常粗暴的。

答案 2 :(得分: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
}

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

答案 3 :(得分:1)

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

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

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

如果你在某个地方有另一个功能Bar,你可以使用Foo的方法 ::Bar();调用Foo之外的Bar,否则你只需要调用Foo :: Bar。