HJ C++11 Day2

Initializer Lists

對于一個類P

class P{P(int a, int b){cout << "P(int, int), a=" << a << ", b = " << b << endl;}P(initializer_list<int> initlist){cout << "P(initializer_list<int>), values= ";for(auto i : initlist)cout << i << ' ';cout << endl;}
}

當運行

//和第一種構造函數完全吻合
P p(77, 5);    //P(int a, int b), a = 77, b = 5
//輸入參數為一包,和第二種構造函數更加符合
P q{77, 5};    //P(initializer_list<int> initlist), values = 77 5
//輸入參數為一包,只能與第二種構造函數吻合
P r{77, 5, 42};//P(initializer_list<int> initlist), values = 77 5 42
//一包參數,和第二種構造函數更加符合
P s = {77, 5};    //P(initializer_list<int> initlist), values = 77 5 42

討論:如果只有第一種構造函數時,p不受影響,q也不受影響,因為這一包數據會被拆解為2個數據,恰好符合構造函數的參數要求,但是r會被拆解為3個參數,不符合構造函數的要求,s也不影響。

initializer_list的背后是一個array,但是實際上array是一個迭代器。
編譯器在看到大括號{}時就會自動調用initializer_list的私有構造函數,按理說應該沒有人能夠調用它的私有構造函數,但是編譯器具有最高權限,編譯器可以調用。實際過程是:編譯器在看到大括號{}后,在調用私有構造函數之前,就已經準備好了一個array,然后把這個array的頭部傳進來,長度也傳進來,將其登記起來。

explicit(用于輸入參數多于1個實參(多個參數沒有默認值)的構造函數)

拒絕隱式的類型轉換,讓編譯器不要自作聰明,在構造函數前聲明,則只有被人為明確調用時才會調用,不允許編譯器自己偷偷調用。
對于一個類P

class P{
public:P(int a, int b){cout << "P(int a, int b) \n";}P(initializer_list<int>){cout << "initializer_list<int> \n";}explicit P(int a, int b, int c){cout << "explicit P(int a, int b, int c) \n";}
}
void fp(const P&){};

運行下面的代碼

P p1(77, 5);   //P(int a, int b)
P p2{77, 5};   //P(initializer_list<int>)
P p3{77, 5, 42};   //P(initializer_list<int>)
P p4 = {77, 5};   //P(initializer_list<int>)
P p5 = (77, 5, 42);  //error
p P6(77, 5, 42);    //explicit P(int a, int b, int c)
P p7 = {77, 5, 42};   //P(initializer_list<int>)fp({47, 11});       //P(initializer_list<int>)
fp({47, 11, 3});    //error
fp(P{47, 11});       //P(initializer_list<int>)
fp(P{47, 11, 3});    //P(initializer_list<int>)p P11{77, 5, 42, 500};  //P(initializer_list<int>)
p P12 = {77, 5, 42, 500};  //P(initializer_list<int>)
p P13{10};  //P(initializer_list<int>)

下面重點解釋下為什么P p3{77, 5, 42}; 不會報錯,但是P p5 = (77, 5, 42); 會報錯:
P p3{77, 5, 42}; 屬于列表構造,你使用花括號{}初始化時,initializer_list<int> 構造函數會優先被調用,不會再管explicit P(int a, int b, int c)構造函數,所以不會報錯。
但是P p5 = {77, 5, 42};屬于拷貝構造,拷貝構造會隱式調用P(int a, int b, int c)但是該構造函數前面加了個explicit,導致沒有合適的構造函數可以調用,最終導致報錯。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/71771.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/71771.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/71771.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

樹莓派5首次開機保姆級教程(無顯示器通過VNC連接樹莓派桌面)

第一次開機詳細步驟 步驟一&#xff1a;樹莓派系統燒錄1 搜索打開燒錄軟件“Raspberry Pi Imager”2 選擇合適的設備、系統、SD卡3 燒錄配置選項 步驟二&#xff1a;SSH遠程樹莓派1 樹莓派插電2 網絡連接&#xff08;有線或無線&#xff09;3 確定樹莓派IP地址 步驟三&#xff…

裝飾器模式--RequestWrapper、請求流request無法被重復讀取

目錄 前言一、場景二、原因分析三、解決四、更多 前言 曾經遇見這么一段代碼&#xff0c;能看出來是把request又重新包裝了一下&#xff0c;核心信息都不會改變 后面了解到這叫 裝飾器模式&#xff08;Decorator Pattern&#xff09; &#xff1a;也稱為包裝模式(Wrapper Pat…

大語言模型進化論:從達爾文到AI的啟示與展望

文章大綱 引言大語言模型中的“進化論”思想體現遺傳變異過度繁殖和生存斗爭大模型“過度繁殖”與“生存競爭”機制解析**一、過度繁殖:技術迭代的指數級爆發****二、生存競爭:計算資源的達爾文戰場****三、生存競爭勝出關鍵要素****四、行業競爭格局演化趨勢**核心結論自然選…

監聽 RabbitMQ 延時交換機的消息數、OpenFeign 路徑參數傳入斜杠無法正確轉義

背景 【MQ】一套為海量消息和高并發熱點消息&#xff0c;提供高可用精準延時服務的解決方案 我現在有一個需求&#xff0c;就是監聽 RabbitMQ 一個延時交換機的消息數&#xff0c;而 RabbitTemplate 是不存在對應的方法來獲取的。 而我們在 RabbitMQ 的控制臺卻可以發現延時交…

分布式網絡

分布式網絡&#xff08;Distributed Network&#xff09;指的是一種計算機網絡架構&#xff0c;其中計算資源&#xff08;計算、存儲、數據處理等&#xff09;分布在多個物理或邏輯上的節點上&#xff0c;而不是集中在單一的服務器或數據中心中。這種架構的主要目標是提高系統的…

【Elasticsearch】Elasticsearch 中使用 HDFS 存儲快照

在 Elasticsearch 中使用 HDFS 存儲快照的步驟如下&#xff1a; 1.安裝 HDFS 插件 要使用 HDFS 存儲 Elasticsearch 的索引快照&#xff0c;需要在 Elasticsearch 集群的所有節點上安裝 HDFS 插件。 ? 在線安裝&#xff1a;適用于網絡環境良好的場景&#xff0c;執行以下命…

淺談 DeepSeek 對 DBA 的影響

引言&#xff1a; 在人工智能技術飛速發展的背景下&#xff0c;DeepSeek 作為一款基于混合專家模型&#xff08;MoE&#xff09;和強化學習技術的大語言模型&#xff0c;正在重塑傳統數據庫管理&#xff08;DBA&#xff09;的工作模式。通過結合其強大的自然語言處理能力、推理…

STM32F4 UDP組播通信:填一填ST官方HAL庫的坑

先說寫作本文的原因&#xff0c;由于開項目開發中需要用到UDP組播接收的功能&#xff0c;但是ST官方沒有提供合適的參考&#xff0c;使用STM32CubeMX生成的代碼也是不能直接使用的&#xff0c;而我在網上找了一大圈&#xff0c;也沒有一個能夠直接解決的方案&#xff0c;deepse…

leetcode日記(85)驗證二叉搜索樹

不難&#xff0c;有兩種解法&#xff08;看答案才想到中序遍歷&#xff09;。 我用的是普通遞歸&#xff0c;和上一題差不多&#xff0c;規定min和max&#xff0c;每次遍歷縮小范圍: /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNod…

如何在rust中解析 windows 的 lnk文件(快捷方式)

一、從標題二開始看&#x1f601; 這些天在使用rust寫一個pc端應用程序&#xff0c;需要解析lnk文件獲取lnk的圖標以及原程序地址&#xff0c;之前并沒有過pc端應用程序開發的經驗&#xff0c; 所以在廣大的互聯網上游蕩了兩天。額&#x1f97a; 今天找到了這個庫 lnk_parse很…

啟動wsl里的Ubuntu24報錯:當前計算機配置不支持 WSL2,HCS_E_HYPERV_NOT_INSTALLED

問題&#xff1a;啟動wsl里的Ubuntu24報錯 報錯信息&#xff1a; 當前計算機配置不支持 WSL2。 請啟用“虛擬機平臺”可選組件&#xff0c;并確保在 BIOS 中啟用虛擬化。 通過運行以下命令啟用“虛擬機平臺”: wsl.exe --install --no-distribution 有關信息&#xff0c;請訪…

Python使用FastAPI結合Word2vec來向量化200維的語言向量數值

準備 pip install fastapi>0.68.0 pip install uvicorn[standard]>0.15.0 pip install gensim>4.0.0 pip install jieba>0.42.1 pip install numpy>1.21.0 pip install scikit-learn>1.0.0少了的就直接補充就好 代碼 from fastapi import FastAPI, HTTPExc…

ControlNet

文章目錄 摘要abstract1.ControlNet1.1 原文摘要1.2 模型架構1.3 架構細節1.4 訓練損失函數1.5 實驗1.6 結論 2.總結參考文獻 摘要 本周學習的ControlNet 是一種用于文本到圖像擴散模型&#xff08;如 Stable Diffusion&#xff09;的條件控制方法。它通過凍結預訓練的擴散模型…

Visual-RFT視覺強化微調:用「試錯學習」教會AI看圖說話

&#x1f4dc; 文獻卡 英文題目: Visual-RFT: Visual Reinforcement Fine-Tuning;作者: Ziyu Liu; Zeyi Sun; Yuhang Zang; Xiaoyi Dong; Yuhang Cao; Haodong Duan; Dahua Lin; Jiaqi WangDOI: 10.48550/arXiv.2503.01785摘要翻譯: 像OpenAI o1這樣的大型推理模型中的強化微調…

Hadoop管理頁看不到任務的問題

這個yarn分配任務了但是為空 在$HADOOP_HOME/conf/mapred-site.xml 原來的配置文件基礎之上添加&#xff1a; <property><name>mapreduce.framework.name</name><value>yarn</value></property> 重啟之后就好了

傅里葉變換:跨越時空的數學魔法

引言&#xff1a;從振動到信息——傅里葉的智慧 傅里葉變換&#xff08;Fourier Transform&#xff09;是數學與工程領域最具影響力的工具之一。它的核心思想是將復雜的信號分解為簡單的正弦波和余弦波的疊加&#xff0c;從而揭示隱藏在數據背后的頻率信息。自19世紀法國數學家…

DR和BDR的選舉規則

在 OSPF&#xff08;開放最短路徑優先&#xff09;協議中&#xff0c;DR&#xff08;Designated Router&#xff0c;指定路由器&#xff09; 和 BDR&#xff08;Backup Designated Router&#xff0c;備份指定路由器&#xff09; 的選舉是為了在廣播型網絡&#xff08;如以太網…

【linux網絡編程】套接字編程API詳細介紹

在C語言中&#xff0c;套接字&#xff08;Socket&#xff09;編程主要用于網絡通信&#xff0c;尤其是在基于TCP/IP協議的應用程序開發中。常用的套接字編程API主要基于Berkeley Sockets&#xff08;伯克利套接字&#xff09;接口&#xff0c;這些函數通常在<sys/socket.h&g…

Linux和gcc/g++常用命令總結

目錄 Linux命令總結 文件操作相關命令 ls cd pwd cp mv rm cat mkdir rmdir touch 文本處理操作命令 grep awk sed 進程管理操作相關命令 ps top htop kill pkill killall chmod chown 網絡操作相關命令 ping ifconfig netstat ss lsof curl …

VUE的第二天

1. 指令修飾符 1.1什么是指令修飾符&#xff1f; ? 所謂指令修飾符就是通過“.”指明一些指令后綴 不同的后綴封裝了不同的處理操作 —> 簡化代碼 1.2按鍵修飾符 keyup.enter —>當點擊enter鍵的時候才觸發 代碼演示&#xff1a; <div id"app"><…