成員函式後面加const,沒有const,以及使用的區別
函式後面加const
編譯器會自動給每一個函式加一個this指標。在一個類的函式後面加上const後,就表明這個函式是不能改變類的成員變數的(加了mutable修飾的除外,後面有講)。實際上,也就是對這個this指標加上了const修飾。
#include <iostream> using namespace std; class CTest { public: void show() const { cout << "const" << endl; } void show() { cout << "normal" << endl; } }; int main() { CTest a; a.show(); const CTest b; b.show(); system("pause"); return 0; }
顯示結果:normal
const
a物件將呼叫普通show(),b物件將呼叫show() const。
如果註釋掉 void show() const 該成員函式,b.show()將報錯。
如果註釋掉void show(),程式可以正常執行,因為a.show()呼叫時,會將其this指標上加const
mutable關鍵字
關鍵字mutable是C++中一個不常用的關鍵字,他只能用於類的非靜態和非常量資料成員。
如果一個類的成員函式被宣告為const型別,表示該函式不會改變物件的狀態,也就是該函式不會修改類的非靜態資料成員。但是有些時候需要在該類函式中對類的資料成員進行賦值,這個時候就需要用到mutable關鍵字了。
class CTest
{
public:
bool GetData() const
{
m_n1++;
return m_b2;
}
private:
mutable int m_n1;
bool m_b2;
};
如果m_nA前不加mutable,編譯將報錯 error C2166: l-value specifies const object (error C2166: 左值指定 const 物件)
相關推薦
成員函式後面加const,沒有const,以及使用的區別
函式後面加const編譯器會自動給每一個函式加一個this指標。在一個類的函式後面加上const後,就表明這個函式是不能改變類的成員變數的(加了mutable修飾的除外,後面有講)。實際上,也就是對這個this指標加上了const修飾。#include <iostrea
c++成員函式後面加一個冒號的含義
轉載自:https://zhidao.baidu.com/question/2010930169328038188.html 冒號後面跟的是賦值,這種寫法是C++的特性。 A( int aa, int bb ):a(aa),b(bb) { } 相當於 A( int aa,
C++函式後面加const
非靜態成員函式後面加const(加到非成員函式或靜態成員後面會產生編譯錯誤),表示成員函式隱含傳入的this指標為const指標,決定了在該成員函式中,任意修改它所在的類的成員的操作都是不允許的(因為隱含了對this指標的const引用);唯一的例外是對於mutable修飾的成員。加了const
C\C++中函式後面加const
c++ 在函式後加const的意義: 我們定義的類的成員函式中,常常有一些成員函式不改變類的資料成員,也就是說,這些函式是"只讀"函式,而有一些函式要修改類資料成員的值。如果把不改變資料成員的函式都加上const關鍵字進行標識,顯然,可提高程式的可讀性。其實,它還能提高程式的可靠性,
C\C++中函式後面加const修飾
我們定義的類的成員函式中,常常有一些成員函式不改變類的資料成員,也就是說,這些函式是"只讀"函式,而有一些函式要修改類資料成員的值。如果把不改變資料成員的函式都加上const關鍵字進行標識,顯然,可提高程式的可讀性。其實,它還能提高程式的可靠性,已定義成con
c++類成員函式後邊加const是為什麼?
時間是讓人猝不及防的東西,晴是有風陰時有雨,爭不過朝夕,又念著往昔,偷走了青絲卻留住一個你 #include <iostream> #include <string> using namespace std; class Test { pub
C++函式後面加const修飾
給隱含的this指標加const,表示這個this指向的東西是const的,也就是說這個函式中無法改動資料成員了。const是一種保證,告訴你這個成員不會改變物件的狀態。 宣告一個成員函式的時候用const關鍵字是用來說明這個函式是 “只讀(read-only
C\C++學習--函式後面加const
https://blog.csdn.net/smf0504/article/details/52311207c++ 在函式後加const的意義: 我們定義的類的成員函式中,常常有一些成員函式不改變類的資料成員,也就是說,這些函式是"只讀"函式,而有一些函式要修改類資料成
建構函式後面加冒號,這傻逼玩意,有病吧
簡單的講:冒號後面跟的是賦值,這種寫法是C++的特性。這麻痺特性有毛病。。。A( int aa, int bb ):a(aa),b(bb) { } 相當於 A( int aa, int bb ) { a=aa; b=bb; } 來一段經典程式碼: #include &l
static成員函式不能被宣告為const virtual volatile 原因
1.virtual與靜態函式 C++中,靜態成員函式不能被宣告為virtual函式。 例如,下面的程式會編譯失敗。 #include<iostream> class Test { public: // 編譯錯誤:static成員函式
C++子類的建構函式後面加:冒號的作用
在C++類的建構函式中經常會看到如下格式的寫法: MyWindow::MyWindow(QWidget* parent , Qt::WindowFlags flag) : QMainWindow(pa
< C++ > initializer list 初始化列表(建構函式後面加個冒號的解釋)
Keypoint : 呼叫父類的建構函式(一般為有參建構函式),初始化類中的成員。 C++ primer 5th edition: Remember When creating an object of a derived class, a program first
函式後面加throw關鍵字的含義
1、對throw的說明 C++函式後面後加關鍵字throw(something)限制,是對這個函式的異常安全性作出限制。 舉例及解釋如下: void fun() throw() 表示fun不允許丟擲任何異常,即fun是異常安全的。 void fun() throw(...)
【C++】C++成員函式後面跟冒號冒號
/* node class definition*/ class Node { public: int data; // data Node *parent; Node *left; N
svn安裝好了,沒有圖標,沒有提交,和更新
svn解決方案,當時svn剛裝好,最後重啟了一下,或者退出重啟,本文出自 “總結,學習,在總結” 博客,請務必保留此出處http://593380505.blog.51cto.com/12813864/1924961svn安裝好了,沒有圖標,沒有提交,和更新
C# 學習之接口(寫給自己,沒有權威,歡迎糾正)
教程 pub oid 沒有 命名 自己 特性 face 但是 重新學習了C#的三大特性,發現接口一直沒有使用,都快忘了,廢話不說,這裏沒有代碼,主要是描述給我自己看的(主要是網上的教程都是W3的,沒有什麽口語化的描述) 1、 接口是需要實例的,在使用的時候一定要實例
非歸檔模式,沒有備份,直接拔電導致Undo損壞
ORACLE undo 非歸檔模式,沒有備份,直接拔電導致Undo損壞啟動數據庫,檢查故障信息SQL> conn / as sysdbaSQL> startup pfile=‘ ‘;報錯,ORA-03113:end-of-file on communucation channel查看ale
類成員函式的過載、覆蓋和隱藏(遮蔽)的區別
a.成員函式被過載的特徵: (1)相同的範圍(在同一個類中); (2)函式名字相同; (3)引數不同; (4)virtual 關鍵字可有可無。 b.覆蓋是指派生類函式覆蓋基類函式,特徵是: (1)不同的範圍(分別位於派生類與基類); (2)函式名字相同;
用layui修改表單select值後沒有變,沒有反應,解決方案
解決方案: $("#admin_user_id").prepend("<option value='0'>--請選擇服務人員--</option>"); #admin_
自己才是最大的敵人,沒有最好,只有更好。
1 測試驅動開發模式 1.1 重新定義“測試” 這是一張影響圖: 普通箭頭表示當第一個節點增長時,第二個節點也會做相應的增長。帶圓圈的箭頭表示當第一個節點增長時,第二個節點也會做相應的減少。 當壓力越大時,所做的測試就會越少。測試越少,犯的錯就會越多,就會感到更大的