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

有沒有辦法在 for 循環初始值設定項中定義兩種不

Is there a way to define variables of two different types in a for loop initializer?(有沒有辦法在 for 循環初始值設定項中定義兩種不同類型的變量?)
本文介紹了有沒有辦法在 for 循環初始值設定項中定義兩種不同類型的變量?的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

您可以在 for 循環中定義 2 個相同類型的變量:

You can define 2 variables of the same type in a for loop:

int main() {
  for (int i = 0, j = 0; i < 10; i += 1, j = 2*i) {
    cout << j << endl;
  }
}

但是定義不同類型的變量是非法的:

But it is illegal to define variables of different types:

int main() {
  for (int i = 0, float j = 0.0; i < 10; i += 1, j = 2*i) {
    cout << j << endl;
  }
}

有沒有辦法做到這一點?(我不需要在循環內使用 i,只需使用 j.)

Is there a way to do this? (I don't need to use i inside the loop, just j.)

如果您有完全被黑和晦澀的解決方案,那對我來說沒問題.

If you have totally hacked and obscure solution, It's OK for me.

在這個人為的例子中,我知道你可以只對兩個變量使用 double.我正在尋找一個通用的答案.

In this contrived example I know you could just use double for both variables. I'm looking for a general answer.

請不要建議將任何變量移到 for 主體之外,可能對我來說不可用,因為它是一個迭代器,它必須在循環后立即消失,而 for 語句將包含在我的 foreach 中 宏:

Please do not suggest to move any of the variables outside of for body, probably not usable for me as one is an iterator that has to disappear just after the loop and the for statement is to be enclosed in my foreach macro:

#define foreach(var, iter, instr) {                  
    typeof(iter) var##IT = iter;                     
    typeof(iter)::Element var = *var##IT;            
    for (; var##_iterIT.is_still_ok(); ++var##IT, var = *var#IT) {  
      instr;                                         
    }                                                
  }

可以這樣使用:

foreach(ii, collection, {
  cout << ii;
}). 

但我需要一些像這樣使用的東西:

But I need something that will be used like that:

foreach(ii, collection)
  cout << ii;

請不要引入任何運行時開銷(但編譯可能會很慢).

Please do not introduce any runtime overhead (but it might be slow to compile).

推薦答案

這是一個使用 boost 預處理器的版本(這只是為了好玩.有關真實世界的答案,請參閱上面@kitchen 的答案):

Here is a version using boost preprocessor (This is just for fun. For the real-world answer, see @kitchen's one above):

FOR((int i = 0)(int j = 0.0), i < 10, (i += 1, j = 2 * i)) { 

}

第一部分指定了一系列聲明:(a)(b)....后面聲明的變量可以引用之前聲明的變量.第二和第三部分和往常一樣.在第二部分和第三部分出現逗號的地方,可以使用括號來防止它們分隔宏參數.

The first part specifies a sequence of declarations: (a)(b).... The variables declared later can refer to variables declared before them. The second and third part are as usual. Where commas occur in the second and third parts, parentheses can be used to prevent them to separate macro arguments.

我知道有兩個技巧用于聲明變量,這些變量后來在添加到宏之外的復合語句中可見.第一個使用條件,如 if:

There are two tricks known to me used to declare variables that are later visible in a compound statement added outside a macro. The first uses conditions, like an if:

if(int k = 0) ; else COMPOUND_STATEMENT

然后 k 是可見的.自然地,它總是必須評估為 false.所以它不能被我們使用.另一個上下文是這樣的:

Then k is visible. Naturally, it always have to evaluate to false. So it can't be used by us. The other context is this one:

for(int k = 0; ...; ...) COMPOUND_STATEMENT

這就是我要在這里使用的.我們必須注意只對 COMPOUND_STATEMENT 進行一次迭代.執行增量和條件檢查的實際 for 循環必須放在最后,因此附加的復合語句屬于它.

That's what i'm going to use here. We'll have to watch to only make one iteration of COMPOUND_STATEMENT. The actual for loop that does the increment and condition checking has to come at the end, so the appended compound statement appertains to it.

#include <boost/preprocessor.hpp>
#include <iostream>

#define EMIT_DEC_(R,D,DEC) 
    for(DEC; !_k; ) 

#define FOR(DECS, COND, INC) 
    if(bool _k = false) ; else 
      BOOST_PP_SEQ_FOR_EACH(EMIT_DEC_, DECS, DECS) 
        for(_k = true; COND; INC)

int main() {
    FOR((int i = 0)(float j = 0.0f), i < 10, (i += 1, j = 2 * i)) {
        std::cout << j << std::endl;
    }
}

它創建了一堆 for 語句,每個語句嵌套在另一個語句中.它擴展為:

It's creating a bunch of for statements, each nested into another one. It expands into:

if(bool _k = false) ; else
  for(int i = 0; !_k; )
    for(float j = 0.0f; !_k; )
      for(_k = true; i < 10; (i += 1, j = 2 * i)) {
        std::cout << j << std::endl;
      }

這篇關于有沒有辦法在 for 循環初始值設定項中定義兩種不同類型的變量?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

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

相關文檔推薦

What do compilers do with compile-time branching?(編譯器如何處理編譯時分支?)
Can I use if (pointer) instead of if (pointer != NULL)?(我可以使用 if (pointer) 而不是 if (pointer != NULL) 嗎?)
Checking for NULL pointer in C/C++(在 C/C++ 中檢查空指針)
Math-like chaining of the comparison operator - as in, quot;if ( (5lt;jlt;=1) )quot;(比較運算符的數學式鏈接-如“if((5<j<=1)))
Difference between quot;if constexpr()quot; Vs quot;if()quot;(“if constexpr()之間的區別與“if())
C++, variable declaration in #39;if#39; expression(C++,if 表達式中的變量聲明)
主站蜘蛛池模板: 企业彩铃制作_移动、联通、电信集团彩铃上传开通_彩铃定制_商务彩铃管理平台-集团彩铃网 | 沙盘模型公司_沙盘模型制作公司_建筑模型公司_工业机械模型制作厂家 | 机构创新组合设计实验台_液压实验台_气动实训台-戴育教仪厂 | 青岛美佳乐清洁工程有限公司|青岛油烟管道清洗|酒店|企事业单位|学校工厂厨房|青岛油烟管道清洗 插针变压器-家用电器变压器-工业空调变压器-CD型电抗器-余姚市中驰电器有限公司 | 电采暖锅炉_超低温空气源热泵_空气源热水器-鑫鲁禹电锅炉空气能热泵厂家 | 京港视通报道-质量走进大江南北-京港视通传媒[北京]有限公司 | 陶瓷加热器,履带式加热器-吴江市兴达电热设备厂 | 联系我们老街华纳娱乐公司官网19989979996(客服) | Type-c防水母座|贴片母座|耳机接口|Type-c插座-深圳市步步精科技有限公司 | 微量水分测定仪_厂家_卡尔费休微量水分测定仪-淄博库仑 | 房车价格_依维柯/大通/东风御风/福特全顺/江铃图片_云梯搬家车厂家-程力专用汽车股份有限公司 | 集装箱箱号识别_自重载重图像识别_铁路车号自动识别_OCR图像识别 | 无菌检查集菌仪,微生物限度仪器-苏州长留仪器百科 | 苏商学院官网 - 江苏地区唯一一家企业家自办的前瞻型、实操型商学院 | 楼承板-开口楼承板-闭口楼承板-无锡海逵 | 香港新时代国际美容美发化妆美甲培训学校-26年培训经验,值得信赖! | Q361F全焊接球阀,200X减压稳压阀,ZJHP气动单座调节阀-上海戎钛 | 存包柜厂家_电子存包柜_超市存包柜_超市电子存包柜_自动存包柜-洛阳中星 | 微型气象仪_气象传感器_防爆气象传感器-天合传感器大全 | 鹤壁创新仪器公司-全自动量热仪,定硫仪,煤炭测硫仪,灰熔点测定仪,快速自动测氢仪,工业分析仪,煤质化验仪器 | 南方珠江-南方一线电缆-南方珠江科技电缆-南方珠江科技有限公司 南汇8424西瓜_南汇玉菇甜瓜-南汇水蜜桃价格 | 分子精馏/精馏设备生产厂家-分子蒸馏工艺实验-新诺舜尧(天津)化工设备有限公司 | 电动葫芦|手拉葫芦|环链电动葫芦|微型电动葫芦-北京市凌鹰起重机械有限公司 | 苏州伊诺尔拆除公司_专业酒店厂房拆除_商场学校拆除_办公楼房屋拆除_家工装拆除拆旧 | 天津试验仪器-电液伺服万能材料试验机,恒温恒湿标准养护箱,水泥恒应力压力试验机-天津鑫高伟业科技有限公司 | 碳化硅,氮化硅,冰晶石,绢云母,氟化铝,白刚玉,棕刚玉,石墨,铝粉,铁粉,金属硅粉,金属铝粉,氧化铝粉,硅微粉,蓝晶石,红柱石,莫来石,粉煤灰,三聚磷酸钠,六偏磷酸钠,硫酸镁-皓泉新材料 | YAGEO国巨电容|贴片电阻|电容价格|三星代理商-深圳市巨优电子有限公司 | 卫浴散热器,卫浴暖气片,卫生间背篓暖气片,华圣格浴室暖气片 | 澳门精准正版免费大全,2025新澳门全年免费,新澳天天开奖免费资料大全最新,新澳2025今晚开奖资料,新澳马今天最快最新图库-首页-东莞市傲马网络科技有限公司 | ET3000双钳形接地电阻测试仪_ZSR10A直流_SXJS-IV智能_SX-9000全自动油介质损耗测试仪-上海康登 | 安徽合肥项目申报咨询公司_安徽合肥高新企业项目申报_安徽省科技项目申报代理 | 防爆电机_防爆电机型号_河南省南洋防爆电机有限公司 | 合肥通道闸-安徽车牌识别-人脸识别系统厂家-安徽熵控智能技术有限公司 | 塑胶地板-商用PVC地板-pvc地板革-安耐宝pvc塑胶地板厂家 | 泰兴市热钻机械有限公司-热熔钻孔机-数控热熔钻-热熔钻孔攻牙一体机 | 卡诺亚轻高定官网_卧室系统_整家定制_定制家居_高端定制_全屋定制加盟_定制家具加盟_定制衣柜加盟 | 哈尔滨治「失眠/抑郁/焦虑症/精神心理」专科医院排行榜-京科脑康免费咨询 一对一诊疗 | 氢氧化钙设备_厂家-淄博工贸有限公司 | 细石混凝土泵_厂家_价格-烟台九达机械有限公司| 快干水泥|桥梁伸缩缝止水胶|伸缩缝装置生产厂家-广东广航交通科技有限公司 | 集菌仪厂家_全封闭_封闭式_智能智能集菌仪厂家-上海郓曹 |