C 中的 :: 用法

::是运算符中等级最高的,它分为三种:
1)global scope(全局作用域符),用法(::name)
2)class scope(类作用域符),用法(class::name)
3)namespace scope(命名空间作用域符),用法(namespace::name)
他们都是左关联(left-associativity)
他们的作用都是为了更明确的调用你想要的变量,如在程序中的某一处你想调用全局变量a,那么就写成::a,如果想调用class A中的成员变量a,那么就写成A::a,另外一个如果想调用namespace std中的cout成员,你就写成std::cout(相当于using namespace
std;cout)意思是在这里我想用cout对象是命名空间std中的cout(即就是标准库里边的cout)

比如几天在看一个TCP的网络程序时,程序中自己定义了一个类封装了IP链接,而且名称也是用的connect,具体如下

class IPStack
{public:
    ........
    ........int connect(const char* hostname, int port)
    {int type = SOCK_STREAM;struct sockaddr_in address;int rc = -1;
        sa_family_t family = AF_INET;struct addrinfo *result = NULL;struct addrinfo hints = {0, AF_UNSPEC, SOCK_STREAM, IPPROTO_TCP, 0, NULL, NULL, NULL};if ((rc = getaddrinfo(hostname, NULL, &hints, &result)) == 0)
        {struct addrinfo* res = result;/* prefer ip4 addresses */while (res)
            {if (res->ai_family == AF_INET)
                {
                    result = res;break;
                }
                res = res->ai_next;
            }if (result->ai_family == AF_INET)
            {
                address.sin_port = htons(port);
                address.sin_family = family = AF_INET;
                address.sin_addr = ((struct sockaddr_in*)(result->ai_addr))->sin_addr;
            }elserc = -1;

            freeaddrinfo(result);
        }if (rc == 0)
        {
            mysock = socket(family, type, 0);if (mysock != -1)
            {int opt = 1;//if (setsockopt(mysock, SOL_SOCKET, SO_NOSIGPIPE, (void*)&opt, sizeof(opt)) != 0)//    printf('Could not set SO_NOSIGPIPE for socket %d', mysock);
                rc = ::connect(mysock, (struct sockaddr*)&address, sizeof(address));    //调用全局的connect函数即socket.h里面的connect函数            }
        }return rc;
    }
::的用法算是C 中的基础,如果运用的好的话,你程序的出错率也许会降很多
(0)

相关推荐

  • C 20尝鲜:新增语法糖

    指定初始化 现在可以初始化特定(指定的)聚合成员并跳过其他成员.与C语言不同,初始化顺序必须与聚合声明相同. #include <iostream>#include <string& ...

  • C++ 异常机制(下)

    目录 八.C++标准异常类 九.编写自己的异常类 十.继承在异常中的应用 八.C++标准异常类 C++标准库异常类继承层次中的根类为exception,其定义在exception头文件中,它是C++标 ...

  • 他来了,他来了,C 17新特性精华都在这了

    程序喵之前已经介绍过C++11的新特性和C++14的新特性(点击对应文字,直接访问),今天向亲爱的读者们介绍下C++17的新特性,现在基本上各个编译器对C++17都已经提供完备的支持,建议大家编程中尝 ...

  • (7条消息) Linux C/C++ 获取当前工作目录

    在windows系统下,getcwd()函数是在#include <direct.h>: Linux系统,则是在#include <unistd.h>. 1.getcwd() ...

  • 子宮肌瘤的治療鍼灸,中藥用法摘

    ​靈樞三五針法治療子宮肌瘤分享: 手術治療是大傷元氣,從根本上解決不了問題,切完以後還會再長.這個用中藥可以解決,用鍼灸也可以解決. 根據取象比類原理,如果將子宮翻過來看,它的後壁形狀很像膽囊,還有男 ...

  • 的得地三个字,古诗词中的使用,不同于文章中的用法

    前言 有网友留言给我,说老街你明白"的.得.地"的区别吗?我知道是对我文章中这三个字的使用提出了批评.这个是事实,接受批评. 其实,对文章中的得地三个字的用法,我还是比较清楚的.打 ...

  • 三分钟掌握some在疑问句中的用法|智学君三分钟英语

    Some 不只是用在肯定句中用,在疑问句中也常用.考生经常出错,三分钟快速掌握.

  • 沸石粉在水产养殖中的用法<span>原创</span>

    [简 介]沸石粉是一种的天然矿物,在自然界中广泛存在,主要成分是硅铝酸盐,具体成分因地域状况可能不同.水产上使用的斜发石沸石粉有独特的空腔结构,因此是一种很好的吸附剂和离子交换剂:同时沸石粉含有丰富的 ...

  • “六冲”在八字中的用法2

    "六冲"在八字中的用法2 1.地支六冲 子午冲,丑未冲,寅申冲,巳亥冲,卯酉冲,辰戌冲. 子冲午谓旺冲衰,为克:午冲子谓衰冲旺,为激. 丑冲未是破其墓库,本土气增强而藏元尽除. 寅 ...

  • “六害”在八字中的用法

    "六害"在八字中的用法 一,何谓六害 子未害,丑午害,寅巳害,卯辰害,亥申害,戌酉害. 六害是对六合而言,不见六合而不论六害,与六冲并用.害就是破坏合好之意,主要是对婚姻或友情而言 ...

  • “三刑”在八字中的用法2

    刑就是指触犯了刑法,一个人犯了罪,小则会给亲人带来恶运,大则会给集体,国家带来灾难,八字中刑也分几种,就算命中带刑也不一定会犯罪,不一定全是凶,要看有没有吉神,凶神的配合. 刑亦有好有坏,君子遇之则吉 ...

  • “穿害”在八字中的用法

    穿即害: 子未穿.卯辰穿.寅巳穿.丑午穿.申亥穿.酉戌穿. 八字中的穿有时比冲还重要.以相克又带穿的情况最严重. 例乾造: 庚庚庚戊 子辰辰寅 行癸未运丁卯年,卯穿倒印星,母逝.为何发生在癸未运,子未 ...

  • 正则表达式在MySQL5.7和MySQL8.0中的用法以及区别(一)

    各位客官姥爷好,欢迎回来.我们上节给出了MySQL数据库的安装教程,我们上节给的是5.7版本的安装教程,鉴于有部分企业已经使用8.0版本的MySQL,那么下面我将对比着学习正则表达式在这两个版本中的差 ...

  • 丁香药酒在钓鱼中的用法用量

    丁香在钓鱼中的应用已经不再陌生,而且诱鱼效果是很不错的,但是很多人没有继续使用,为什么呢?原因就是不知道使用量和用法,是药三分毒,每种药都有正反面,使用不当会起反作用,网上很多丁香配方,但是都没有详细 ...