pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

使用 std::map<K,V>其中 V 沒有可用的默認

Using std::maplt;K,Vgt; where V has no usable default constructor(使用 std::maplt;K,Vgt;其中 V 沒有可用的默認構造函數)
本文介紹了使用 std::map<K,V>其中 V 沒有可用的默認構造函數的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

我有一個作為 std::map 實現的符號表.對于值,無法通過默認構造函數合法地構造值類型的實例.但是,如果我不提供默認構造函數,則會出現編譯器錯誤,如果我使構造函數斷言,我的程序可以正常編譯但在 map<K,V>::operator [] 如果我嘗試使用它來添加新成員.

I have a symbol table implemented as a std::map. For the value, there is no way to legitimately construct an instance of the value type via a default constructor. However if I don't provide a default constructor, I get a compiler error and if I make the constructor assert, my program compile just fine but crashes inside of map<K,V>::operator [] if I try to use it to add a new member.

有沒有辦法讓 C++ 在編譯時禁止 map[k] 作為左值(同時允許它作為 r 值)?

Is there a way I can get C++ to disallow map[k] as an l-value at compile time (while allowing it as an r-value)?

順便說一句:我知道我可以使用 Map.insert(map<K,V>::value_type(k,v)) 插入到地圖中.

BTW: I know I can insert into the map using Map.insert(map<K,V>::value_type(k,v)).

一些人提出了相當于改變值類型的解決方案,以便地圖可以在不調用默認構造函數的情況下構造一個.這與我想要的結果完全相反,因為它將錯誤隱藏到以后.如果我愿意,我可以簡單地從構造函數中刪除斷言.我想要是讓錯誤發生得更快;在編譯時.但是,似乎沒有辦法區分 operator[] 的 r-value 和 l-value 使用,所以看起來我想要的東西無法完成,所以我只需要分配一起使用.

several people have proposed solution that amount to altering the type of the value so that the map can construct one without calling the default constructor. This has exactly the opposite result of what I want because it hides the error until later. If I were willing to have that, I could simply remove the assert from the constructor. What I Want is to make the error happen even sooner; at compile time. However, it seems that there is no way to distinguish between r-value and l-value uses of operator[] so it seems what I want can't be done so I'll just have to dispense with using it all together.

推薦答案

你不能讓編譯器區分 operator[] 的兩種用法,因為它們是同一個東西.Operator[] 返回一個引用,因此分配版本只是分配給該引用.

You can't make the compiler differentiate between the two uses of operator[], because they are the same thing. Operator[] returns a reference, so the assignment version is just assigning to that reference.

就我個人而言,除了快速和骯臟的演示代碼之外,我從不使用運算符 [] 來表示地圖.使用 insert() 和 find() 代替.請注意,make_pair() 函數使插入更易于使用:

Personally, I never use operator[] for maps for anything but quick and dirty demo code. Use insert() and find() instead. Note that the make_pair() function makes insert easier to use:

m.insert( make_pair( k, v ) );

<小時>

在 C++11 中,你也可以這樣做


In C++11, you can also do

m.emplace( k, v );
m.emplace( piecewise_construct, make_tuple(k), make_tuple(the_constructor_arg_of_v) );

即使沒有提供復制/移動構造函數.

even if the copy/move constructor is not supplied.

這篇關于使用 std::map&lt;K,V&gt;其中 V 沒有可用的默認構造函數的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

相關文檔推薦

Assertion failed (size.widthgt;0 amp;amp; size.heightgt;0)(斷言失敗(size.width0 amp;amp; size.height0))
Rotate an image in C++ without using OpenCV functions(在 C++ 中旋轉圖像而不使用 OpenCV 函數)
OpenCV: process every frame(OpenCV:處理每一幀)
Why can#39;t I open avi video in openCV?(為什么我不能在 openCV 中打開 avi 視頻?)
OpenCV unable to set up SVM Parameters(OpenCV 無法設置 SVM 參數)
Convert a single color with cvtColor(使用 cvtColor 轉換單一顏色)
主站蜘蛛池模板: RO反渗透设备_厂家_价格_河南郑州江宇环保科技有限公司 | 北京签证代办_签证办理_商务签证_旅游签证_寰球签证网 | 上海三信|ph计|酸度计|电导率仪-艾科仪器 | 安德建奇火花机-阿奇夏米尔慢走丝|高维|发那科-北京杰森柏汇 | 透平油真空滤油机-变压器油板框滤油机-滤油车-华之源过滤设备 | 间苯二酚,间苯二酚厂家-淄博双和化工 | 深圳市人通智能科技有限公司| 诺冠气动元件,诺冠电磁阀,海隆防爆阀,norgren气缸-山东锦隆自动化科技有限公司 | 电销卡 防封电销卡 不封号电销卡 电话销售卡 白名单电销卡 电销系统 外呼系统 | 防腐储罐_塑料储罐_PE储罐厂家_淄博富邦滚塑防腐设备科技有限公司 | 上海平衡机-单面卧式动平衡机-万向节动平衡机-圈带动平衡机厂家-上海申岢动平衡机制造有限公司 | 三轴曲线机-端子插拔力试验机|华杰仪器 | 柔性输送线|柔性链板|齿形链-上海赫勒输送设备有限公司首页[输送机] | 单机除尘器 骨架-脉冲除尘器设备生产厂家-润天环保设备 | 撕碎机_轮胎破碎机_粉碎机_回收生产线厂家_东莞华达机械有限公司 | 电镀整流器_微弧氧化电源_高频电解电源_微弧氧化设备厂家_深圳开瑞节能 | 代理记账_免费注册公司_营业执照代办_资质代办-【乐财汇】 | 贴板式电磁阀-不锈钢-气动上展式放料阀-上海弗雷西阀门有限公司 工业机械三维动画制作 环保设备原理三维演示动画 自动化装配产线三维动画制作公司-南京燃动数字 | 蜗轮丝杆升降机-螺旋升降机-丝杠升降机厂家-润驰传动 | 闪蒸干燥机-喷雾干燥机-带式干燥机-桨叶干燥机-[常州佳一干燥设备] | 净化车间_洁净厂房_净化公司_净化厂房_无尘室工程_洁净工程装修|改造|施工-深圳净化公司 | 反渗透水处理设备|工业零排放|水厂设备|软化水设备|海南净水设备--海南水处理设备厂家 | 溶氧传感器-pH传感器|哈美顿(hamilton) | 工业PH计|工业ph酸度计|在线PH计价格-合肥卓尔仪器仪表有限公司 济南画室培训-美术高考培训-山东艺霖艺术培训画室 | 隐形纱窗|防护纱窗|金刚网防盗纱窗|韦柏纱窗|上海青木装潢制品有限公司|纱窗国标起草单位 | 食品机械专用传感器-落料放大器-低价接近开关-菲德自控技术(天津)有限公司 | 钛板_钛管_钛棒_钛盘管-无锡市盛钛科技有限公司 | 火锅加盟_四川成都火锅店加盟_中国火锅连锁品牌十强_朝天门火锅【官网】 | 曙光腾达官网-天津脚手架租赁-木板架出租-移动门式脚手架租赁「免费搭设」 | 大型果蔬切片机-水果冬瓜削皮机-洗菜机切菜机-肇庆市凤翔餐饮设备有限公司 | 脉冲除尘器,除尘器厂家-淄博机械 | 济南展厅设计施工_数字化展厅策划设计施工公司_山东锐尚文化传播有限公司 | 圆周直径尺-小孔内视镜-纤维研磨刷-东莞市高腾达精密工具 | 361°官方网站| 武汉创亿电气设备有限公司_电力检测设备生产厂家 | 盘装氧量分析仪-防爆壁挂氧化锆分析仪-安徽吉帆仪表有限公司 | 衡阳耐适防护科技有限公司——威仕盾焊接防护用品官网/焊工手套/焊接防护服/皮革防护手套 | 压砖机、液压制砖机、静压砖机、环保砖机生产厂家—杜甫机械 | 自动部分收集器,进口无油隔膜真空泵,SPME固相微萃取头-上海楚定分析仪器有限公司 | 上海质量认证办理中心 | 信阳市建筑勘察设计研究院有限公司|