1. 程式人生 > >【C++】關於以下劃線開頭的變數名

【C++】關於以下劃線開頭的變數名

統標頭檔案裡將巨集名、變數名、內部函式名用"_"頭就是為了避免與使用者用的名字衝突。因為當你include 統標頭檔案時,這些檔案裡的名字都有了定義,如果與你用的名字衝突,就可能引起各種奇怪現象。換句話說:我們寫程式時一定不要用"_"頭的名字,以免與系統標頭檔案的名字衝突,產生奇怪的問題(很難debug弄清楚,當心)。

Python

核心風格:避免用下劃線作為變數名的開始。為下劃線對直譯器有特殊的意義,而且是內建識別符號所使用的符號,我們建議程式設計師避免用下劃線作為變數名的開始。一般來講,變數名_xxx被看作是私有的,在模塊或類外不可以使用。當變數是私有的時候,用_xxx 

來表示變數是很好的習慣。因為變數名__xxx__Python 說有特殊含義,對於普通的變數應當避免這種命名風格。

 "單下劃線開始的成員變數叫做保護變數,意思是隻有類物件和自類物件自己能訪問到這些變數;而 "雙下劃開始的是私有成員,意思是隻有類物件自己能訪問,連子類物件也不能訪問到這個資料。

單下劃線開頭(_foo)的代表不能直接訪問的類屬性,需通過類提供的介面進行訪問,不能用“from xxx import *”匯入;以雙下劃線開頭的(__foo)代表類的私有成員;以雙下劃線開頭和結尾的(__foo__)代表python裡特殊方法專用的標識,如 __init__()代表類的

建構函式。

C++:

符合命名標準,只是有些使用習慣,比如在我們自己寫的類中,為了避免和成員函式名稱重複,我們通常在類的成員變數前加上下劃線。

 class InitParamSetting

{

 public:

 InitParamSetting();
 ~InitParamSetting();

 public:

 void ReadRegInfo();
 void WriteRegInfo();

 CString _localRecPath;//本地錄影存放路徑
 int _maxLocalRecTime;//最大錄影時間(以分鐘為單位)
 CString _capPicPath;//抓圖存放路徑
 CString _vedioWndLabel;//視訊視窗標籤

 };


在我們自定義的類中,類的成員變數一般都加上字首“_”這樣可以避免資料成員與成員函式的引數同名。這個是一般的命名規範,你可以採用也可以不採用

好像華為有這種規範,比如做ACE方面程式設計,你看ACE的源代碼就是了。

如果內部使用的話定義函式為protected或者private就是了,沒必要用_頭。主要是看個人的程式設計習慣。庫函式內部的東西,還要不要去弄。

另:最好不要輕易宣告首字母為"_"變數。就是說庫函式內部實現用了這些函式,因為很多時候一個庫函式功能的實現完全放在這一個函式裡面可能不合適,或者某些庫函式有共用的程式碼,怎麼辦的呢,就設計函式供庫函式的實現呼叫。加下劃線用意是避免命名重複。如果文件沒有明確提及用法之類,最好不要用,以免實現改變了導致程式行為出現變化。

以前就有過微軟的內部函式被破解,然後被人公佈使用了,美其名曰技巧...後來微軟想要改變函式,本來是自己內部用的,只要改作業系統程式碼就可以,結果發現後多程式執行不起來了,最後沒辦法只好保留這些函式,再去設計新的函式來實現想要的功能。所以最好不要依賴實現,不要依賴沒有形成文件的東西

自己定義的名字最好不要在前面加下劃線,以免不小心和人家的函式重名

相關推薦

C++指向結構體變數的指標

#include"iostream" #define N 10 using namespace std; //指向結構體變數的指標 struct Student { int numb; char *

C++關於以下劃線開頭變數

系統標頭檔案裡將巨集名、變數名、內部函式名用"_"開頭就是為了避免與使用者用的名字衝突。因為當你#include 系統標頭檔案時,這些檔案裡的名字都有了定義,如果與你用的名字衝突,就可能引起各種奇怪現象。換句話說:我們寫程式時一定不要用"_"開頭的名字,以免與系統標頭檔案

4、C++靜態成員變數/靜態成員函式/行內函數/友元函式/友元類/友元成員函式

一、靜態成員     我們可以使用 static 關鍵字來把類成員定義為靜態的。當我們宣告類的成員為靜態時,這意味著無論建立多少個類的物件,靜態成員都只有一個副本。     靜態成員在類的所有物件中是共享的。如果不存在其他的初始化語句,在建立第一個物件時,所有的靜態資料都會被初始化為

C++ 私有成員變數的理解

轉載地址:https://www.cnblogs.com/oraser/p/5888116.html 【C++】 私有成員變數的理解 私有成員變數的概念,在腦海中的現象是,以private關鍵字宣告,是類的實現部分,不對外公開,不能在物件外部訪問物件的私有成員變數. 然而,在實現拷貝建構

C++函式過載

C語言沒有函式名過載,C++有函式名過載。 函式名相同,函式引數列表不同,稱為函式名過載。函式引數列表不同包括: 1)引數個數不同; 2)引數型別不同; #include "stdio.h" double find_max(double a, double b, do

C#靜態變數和方法該如何使用?

什麼是靜態變數? 簡單的來說就是:用static修飾的變數,它屬於它所在的類所有,而不是具體的某一個物件。 靜態變數也被稱為全域性變數,就是它在程式執行的時候就被初始化,如果你在它初始化或使用的時候,沒有給它賦值,系統就會給它一個預設值。   靜態方法同理,簡單瞭解一下

C++C語言static變數和函式

使用 static 修飾的變數或函式的作用域僅限於當前模組,對其他模組隱藏,利用這一特性可以在不同的檔案中定義同名的變數或函式,而不必擔心命名衝突。 static 除了可以修飾全域性變數,還可以修飾區域性變數,被 static 修飾的變數統稱為靜態變數(Static

C#全域性變數、全域性靜態變數、區域性變數、區域性靜態變數的區別

C#中變數分為:全域性變數、靜態全域性變數、區域性變數和靜態區域性變數。 1、按儲存區域分        (1)全域性變數、靜態全域性變數和靜態區域性變數都存放在記憶體的靜態儲存區域;        (2)區域性變數存放在記憶體的棧區。  2、按作用域分   

C++C++中變數的宣告與定義的區別

宣告(declaration):意味著告訴編譯器關於變數名稱、變數型別、變數大小、函式名稱、結構名稱、大小等等資訊,並且在宣告階段不會給變數分配任何的記憶體。 定義(definition):定義就是在變數聲明後,給它分配上記憶體。可以看成“定義 = 宣告 + 記憶體分配”。 例如: #includ

C為什麼靜態變數會被初始化為0,而自動變數卻不會被初始化?

把自動變數初始化為0的代價,將會增加函式呼叫的代價。C語言非常注重執行速度。 然而,把全域性變數區初始化為0,僅僅在程式啟動時候產生成本。這也許是這個問題的主要原因。 更精確的說,C++並不把靜態變數初始化為0,他們有自己的預設值,對於原生型別(native types)來

C++結構體變數的初始化

#include"iostream.h" #include"stdio.h" #include"string.h" //學生基本資訊的初始化 struct Student { int numb; ch

C語言允許以下劃線開頭的函式存在

首先,C++裡關於下劃線的問題是源於C語言,因為C++允許用extern “C”來修飾程式碼以C語言語法方式編譯。然後說C語言裡的下劃線:C語言確實允許以下劃線開頭的函式存在,實際上你用一個下劃線開頭的函式名或者變數是沒問題的,但有可能會發生命名衝突。凡是以兩個

程式Windows下根據計算機獲取IP地址的C語言程式

方法一(當指定的裝置不存在時,有可能返回的是本機的IP地址,所以不建議使用): #include <stdio.h> #include <WinSock2.h> #pragm

C#Label不顯示下劃線

WPF的程式,發現視窗上Label顯示的內容,缺失了”_“,開始以為是拷貝時漏了,檢查Content中的內容,發現並沒有問題。 <Label Content="IN_MCP" /> 如上方式設定,顯示內容是”INMCP“。最後的做法是,將一個"_"變成"__"

Primer C++第二章:變數和基本型別

使用列表初始化初始化內建型別時,若存在丟失資訊的風險,編譯器將會報錯: long double ld = 3.1415926536; int b = { ld }; 預設初始化 變數的預設值與變數型別和變數所處的位置有關, 定義於任何函式之外的變數被初始化

C/C++符號常量 常變數

1.常量 在程式執行過程中,其值不能被改變的量叫做常量。 常用的常量有如下幾類: 整型常量 實型常量 字元常量        普通字元        轉義字元 如:\\表示一個反斜線;\n表示換行,將當前位置移到下一行的開頭;\r表示回車,將當前位置移到本行的開

C++static 變數用法

static 變數用法 介紹static變數用法: C++ - static變數宣告 - static變數初始化 static變數宣告 static 宣告可以寫成這個樣子: cla

C++變數定義在.h標頭檔案導致 multiple definition of 的解決方法和根本原因

說明:出現這個錯誤,請你先檢查重複定義的變數是否是定義在了.h標頭檔案中,如果是,請您耐心的看完這篇文章,他會告訴你錯誤的根本原因。 如果你很著急,不想弄清楚原因,請直接按下面的方法更改: 假設重複定

C字符串常量和字符數組

gcc pre class fun 後者 一段 put light cmp 此次博客是轉載某位博主的文章,不過現在找不到了,所以先聲明一下。 先貼一段代碼: #include <stdio.h> int main(int argc, const char**

C#監測文件改變類

tco private clas 目錄修改 obj directory 設置 行修改 config using System.IO;//首先實例化一個對象 FileSystemWatcher watcher = new FileSystemWatcher(); //