C++中的 :: 用法
生活随笔
收集整理的這篇文章主要介紹了
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;}
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++中的基礎,如果運用的好的話,你程序的出錯率也許會降很多轉載于:https://www.cnblogs.com/wujing-hubei/p/6102157.html
總結
以上是生活随笔為你收集整理的C++中的 :: 用法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 梦到抓到兔子是什么意思
- 下一篇: 梦到吃面条是什么意思周公解梦