欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

c++中explicit與mutable關鍵字的深入探究

 更新時間:2021年05月10日 09:29:16   作者:cpp加油站  
這篇文章主要給大家介紹了關于c++中explicit與mutable關鍵字的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

今天說一說c++里面的兩個關鍵字explicit和mutable。

1. explicit關鍵字

在寫c++標準輸入輸出相關文章,查看iostream實現代碼的時候,經??吹綐嬙旌瘮登懊鎺в衑xplicit關鍵字,那么它到底有什么作用呢。

explicit用來防止由構造函數定義的隱式轉換,先看這樣一段代碼:

#include <iostream>

class Base
{
private:
    int a;
public:
    Base(int p_a){
		a = p_a;}
    ~Base(){}
	void print()
	{
		std::cout << "a=" << a << std::endl;
	}
};

int main()
{
	Base base = 5;
	base.print();
	base = 6;
	base.print();
	return 0;
}

聲明一個只有一個int類型私有成員變量的類,這個時候沒有使用explicit關鍵字,那么可以直接使用class Base base = 5;來給成員變量賦值,這也就算了,就當他是在構造了,但是到了base = 6這一行代碼,就很離譜了,沒有調用任何set函數,直接就改變了私有成員的值,這就相當于,你自己房子里面放的錢,別人可以隔墻修改你的錢的數量,想想看,你有10000塊錢放家里,有個人手指一點,錢變成100了,是不是很可怕。

但如果在構造函數前面加一個explicit關鍵字,那么代碼就不能再這樣寫啦,編譯會報錯,如下:

//構造函數前面加explicit
explicit Base(int p_a){
  a = p_a;}

報錯內容類似這樣的:test.cpp:19:14: error: conversion from 'int' to non-scalar type 'Base' requested,這樣就避免了別人隔墻修改你家錢的數量啦。

那么為什么explicit可以起到這個作用呢,在沒有聲明該關鍵字之前,編譯器根據當前的定義和構造函數,在編譯的時候做了一個隱式的類型轉換,但是當編譯器發(fā)現了explicit這個關鍵字之后,就不再做這個隱式轉換,這個時候等號兩邊的值類型很明顯就不一樣,當然會報編譯錯誤啦。

總結:explicit告訴別人,不允許隔墻修改我家錢的數量,你要修改的話,必須進到屋子里才行。

2. mutable關鍵字

mutable用于類的非靜態(tài)和非常量數據成員,一般類的成員函數被聲明為const,就表示不會修改類的數據成員,但如果要在常成員函數中修改類的非靜態(tài)和非常量數據成員,則可以使用mutable修飾該數據成員,如下:

#include <iostream>

class demo
{
public:
int getCnt() const
{
	m_nCount++;
	return m_nCount;
}

private:
	int m_nCount;
};

int main()
{
	return 0;
}

編譯會報錯:test.cpp:13: 錯誤:increment of data-member ‘demo::m_nCount' in read-only structure,但如果改為如下代碼:

#include <iostream>

class demo
{
public:
int getCnt() const
{
	m_nCount++;
	return m_nCount;
}

private:
	mutable int m_nCount;
};

int main()
{
	return 0;
}

在int類型前面加一個mutable關鍵字,編譯就通過了。

總結:mutable允許你在一個固定不變的房子里面放置某些可變的物件。

到此這篇關于c++中explicit與mutable關鍵字的文章就介紹到這了,更多相關c++ explicit與mutable關鍵字內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • c++中struct使用注意事項

    c++中struct使用注意事項

    本文通過2個小示例給大家展示了一下c++中struct使用的注意事項,希望對大家學習C++能夠有所幫助。
    2016-01-01
  • C++詳細分析線程間的同步通信

    C++詳細分析線程間的同步通信

    線程間不通信的話,每個線程受CPU的調度,沒有任何執(zhí)行上的順序可言,線程1和線程2是根據CPU調度算法來的,兩個線程都有可能先運行,是不確定的,線程間的運行順序是不確定的,所以多線程程序出問題,難以復現,本章我們就來了解線程間的同步通信
    2022-05-05
  • c++中priority_queue模擬的實現

    c++中priority_queue模擬的實現

    priority_queue是C++標準庫中的一個容器適配器,用于實現優(yōu)先隊列的數據結構,本文主要介紹了c++中priority_queue模擬的實現,具有一定的參考價值,感興趣的可以了解一下
    2024-09-09
  • 淺談使用Rapidxml 庫遇到的問題和分析過程(分享)

    淺談使用Rapidxml 庫遇到的問題和分析過程(分享)

    下面小編就為大家?guī)硪黄獪\談使用Rapidxml 庫遇到的問題和分析過程(分享)。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • C語言實現校園導游系統

    C語言實現校園導游系統

    這篇文章主要為大家詳細介紹了C語言實現校園導游系統,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • C++使用curl庫的完成流程

    C++使用curl庫的完成流程

    curl 是一個利用URL語法在命令行方式下工作的文件傳輸工具,curl不但提供了一個可執(zhí)行的工具庫,還提供了供程序開發(fā)的libcurl庫,該庫使用c語言編寫,支持跨平臺,本文給大家介紹了C++使用curl庫的完成流程,需要的朋友可以參考下
    2024-09-09
  • 最新VScode C/C++ 環(huán)境配置的詳細教程

    最新VScode C/C++ 環(huán)境配置的詳細教程

    這篇文章主要介紹了最新VScode C/C++ 環(huán)境配置的詳細教程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • 基于C++中setiosflags()的用法詳解

    基于C++中setiosflags()的用法詳解

    下面小編就為大家?guī)硪黄贑++中setiosflags()的用法詳解。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • C語言基本排序算法之shell排序實例

    C語言基本排序算法之shell排序實例

    這篇文章主要介紹了C語言基本排序算法之shell排序,結合具體實例形式分析了基于C語言的shell排序原理與實現技巧,代碼注釋中備有詳細的說明,需要的朋友可以參考下
    2017-09-09
  • Linux環(huán)境下段錯誤的產生原因及調試方法小結

    Linux環(huán)境下段錯誤的產生原因及調試方法小結

    借此機會系統學習了一下,這里對Linux環(huán)境下的段錯誤做個小結,方便以后同類問題的排查與解決
    2011-11-11

最新評論