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

在 C++ 中,為什么我不能像這樣編寫 for() 循環:

In C++ why can#39;t I write a for() loop like this: for( int i = 1, double i2 = 0; (在 C++ 中,為什么我不能像這樣編寫 for() 循環: for( int i = 1, double i2 = 0;)
本文介紹了在 C++ 中,為什么我不能像這樣編寫 for() 循環: for( int i = 1, double i2 = 0;的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

或者,在 for 循環中聲明多個變量是禁止的"?!

or, "Declaring multiple variables in a for loop ist verboten" ?!

我的原始代碼是

 for( int i = 1, int i2 = 1; 
      i2 < mid;
      i++, i2 = i * i ) {

我想遍歷第一個這么多方格,并且想要數字和它的方格,停止條件取決于方格.這段代碼似乎是最清晰的意圖表達,但它是無效的.我可以想到十幾種方法來解決這個問題,所以我不是在尋找最佳選擇,而是為了更深入地了解為什么這是無效的.如果愿意,可以學習一些語言法律方面的知識.

I wanted to loop through the first so-many squares, and wanted both the number and its square, and the stop condition depended on the square. This code seems to be the cleanest expression of intent, but it's invalid. I can think of a dozen ways to work around this, so I'm not looking for the best alternative, but for a deeper understanding of why this is invalid. A bit of language lawyering, if you will.

我年紀大了,還記得你必須在函數開始時聲明所有變量的時候,所以我很感激

I'm old enough to remember when you had to declare all your variables at the start of the function, so I appreciate the

for( int i = 0; ....

語法.閱讀它看起來像在 for() 語句的第一部分中只能有一個類型聲明.所以你可以這樣做

syntax. Reading around it looks like you can only have one type declaration in the first section of a for() statement. So you can do

for( int i=0, j=0; ...

甚至略帶巴洛克風格

for( int i=0, *j=&i; ...

但不是對我敏感的

for( int i=0, double x=0.0; ...

有人知道為什么嗎?這是 for() 的限制嗎?或者對逗號列表的限制,例如逗號列表的第一個元素可以聲明一個類型,但不能聲明另一個?以下逗號的使用是否與 C++ 的不同語法元素不同?

Does anyone know why? Is this a limitation of for()? Or a restriction on comma lists, like "the first element of a comma list may declare a type, but not the other? Are the following uses of commas distinct syntactical elements of C++?

(A)

for( int i=0, j=0; ...

(乙)

int i = 0, j = 0;

(C)

 int z;
 z = 1, 3, 4;

那里有大師嗎?

根據我得到的好評,我想我可以尖銳地提出這個問題:

Based on the good responses I've gotten, I think I can sharpen the question:

在 for 語句中

for( X; Y; Z;) {..... }

什么是 X、Y 和 Z?

what are X, Y and Z?

我的問題是關于 C++,但我沒有很好的 C++ 參考.在我的 C 參考(Harbison and Steele 4th ed, 1995)中,它們都是三個表達式,我的 gcc 需要 C99 模式才能使用 for( int i = 0;

My question was about C++, but I don't have a great C++ refrence. In my C reference (Harbison and Steele 4th ed, 1995), they are all three expressions, and my gcc requires C99 mode to use for( int i = 0;

在 Stroustrup,第 6.3 節中,for 語句的語法如下

In Stroustrup, sec 6.3, the for statement syntax is given as

for( for-init-statement; condition; expression ) 語句

for( for-init-statement; condition; expression ) statements

因此,C++ 有一個專門用于 for() 中的第一個子句的特殊語法語句,我們可以假設它們具有除表達式之外的特殊規則.這聽起來有效嗎?

So C++ has a special syntactic statement dedicated to the first clause in for(), and we can assume they have special rules beyond those for an expression. Does this sound valid?

推薦答案

int i = 1, double i2 = 0; 不是有效的聲明語句,因此不能在 for 語句.如果語句不能獨立于 for 之外,那么它就不能在 for 語句內使用.

int i = 1, double i2 = 0; is not a valid declaration statement, so it cannot be used inside the for statement. If the statement can't stand alone outside the for, then it can't be used inside the for statement.

關于逗號運算符的問題,選項A"和B"是相同的,并且都是有效的.選項C"也有效,但可能不會達到您的預期.z 將被賦值為 1,并且語句 34 實際上不會做任何事情(你的編譯器會可能會警告您沒有效果的語句"并優化它們).

Regarding your questions about comma operators, options 'A' and 'B' are identical and are both valid. Option 'C' is also valid, but will probably not do what you would expect. z will be assigned 1, and the statements 3 and 4 don't actually do anything (your compiler will probably warn you about "statements with no effect" and optimize them away).

更新:為了解決您編輯中的問題,以下是 C++ 規范(第 6.5 節)定義了 for:

Update: To address the questions in your edit, here is how the C++ spec (Sec 6.5) defines for:

for ( for-init-statement condition(opt) ; expression(opt) ) statement

它進一步將 for-init-statement 定義為 expression-statementsimple-declaration.conditionexpression 都是可選的.

It further defines for-init-statement as either expression-statement or simple-declaration. Both condition and expression are optional.

for-init-statement 可以是任何有效的 expression-statement(例如 i = 0;)或 simple-declaration(如int i = 0;).根據規范,語句 int i = 1, double i2 = 0; 不是有效的 simple-declaration,因此與 一起使用是無效的.作為參考,simple-declaration 被定義為(在第 7 節中):

The for-init-statement can be anything that is a valid expression-statement (such as i = 0;) or simple-declaration (such as int i = 0;). The statement int i = 1, double i2 = 0; is not a valid simple-declaration according to the spec, so it is not valid to use with for. For reference, a simple-declaration is defined (in Section 7) as:

attribute-specifier(opt) decl-specifier-seq(opt) init-declarator-list(opt) ;

其中 decl-specifier-seq 將是數據類型加上諸如 staticexterninit-declarator-list 之類的關鍵字 將是一個逗號分隔的聲明符列表及其可選的初始值設定項.嘗試將多個數據類型放入同一個 simple-declaration 實質上是在編譯器需要 init-declarator-list<的地方放置了一個 decl-specifier-seq/代碼>.看到這個元素不合適會導致編譯器將該行視為格式錯誤.

where decl-specifier-seq would be the data type plus keywords like static or extern and init-declarator-list would be a comma-separated list of declarators and their optional initializers. Attempting to put more than one data type in the same simple-declaration essentially places a decl-specifier-seq where the compiler expects a init-declarator-list. Seeing this element out of place causes the compiler to treat the line as ill-formed.

規范還指出,for 循環等效于:

The spec also notes that the for loop is equivalent to:

{
    for-init-statement
    while ( condition ) {
        statement
        expression ;
    }
}

where condition 如果省略,則默認為true".考慮這種擴展"形式可能有助于確定給定的語法是否可以與 for 循環一起使用.

where condition defaults to "true" if it is omitted. Thinking about this "expanded" form may be helpful in determining whether a given syntax may be used with a for loop.

這篇關于在 C++ 中,為什么我不能像這樣編寫 for() 循環: for( int i = 1, double i2 = 0;的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

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

相關文檔推薦

How can I read and manipulate CSV file data in C++?(如何在 C++ 中讀取和操作 CSV 文件數據?)
How does OpenMP handle nested loops?(OpenMP 如何處理嵌套循環?)
Reusing thread in loop c++(在循環 C++ 中重用線程)
Precise thread sleep needed. Max 1ms error(需要精確的線程睡眠.最大 1ms 誤差)
Is there ever a need for a quot;do {...} while ( )quot; loop?(是否需要“do {...} while ()?環形?)
How to break out of a loop from inside a switch?(如何從交換機內部跳出循環?)
主站蜘蛛池模板: 电脑知识|软件|系统|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网 | 特种电缆厂家-硅橡胶耐高温电缆-耐低温补偿导线-安徽万邦特种电缆有限公司 | 伸缩器_伸缩接头_传力接头-巩义市润达管道设备制造有限公司 | 太阳能发电系统-太阳能逆变器,控制器-河北沐天太阳能科技首页 | 压片机_高速_单冲_双层_花篮式_多功能旋转压片机-上海天九压片机厂家 | 国资灵活用工平台_全国灵活用工平台前十名-灵活用工结算小帮手 | 科昊仪器超纯水机系统-可成气相液氮罐-美菱超低温冰箱-西安昊兴生物科技有限公司 | 保镖公司-私人保镖-深圳保镖公司【环宇兄弟保镖】 | 天津热油泵_管道泵_天津高温热油泵-天津市金丰泰机械泵业有限公司【官方网站】 | 高柔性拖链电缆-聚氨酯卷筒电缆-柔性屏蔽电缆厂家-玖泰电缆 | 智能汉显全自动量热仪_微机全自动胶质层指数测定仪-鹤壁市科达仪器仪表有限公司 | 临海涌泉蜜桔官网|涌泉蜜桔微商批发代理|涌泉蜜桔供应链|涌泉蜜桔一件代发 | 酒店品牌设计-酒店vi设计-酒店标识设计【国际级】VI策划公司 | 美国PARKER齿轮泵,美国PARKER柱塞泵,美国PARKER叶片泵,美国PARKER电磁阀,美国PARKER比例阀-上海维特锐实业发展有限公司二部 | 一体式钢筋扫描仪-楼板测厚仪-裂缝检测仪-泰仕特(北京) | 断桥铝破碎机_铝合金破碎机_废铁金属破碎机-河南鑫世昌机械制造有限公司 | 水厂污泥地磅|污泥处理地磅厂家|地磅无人值守称重系统升级改造|地磅自动称重系统维修-河南成辉电子科技有限公司 | 海德莱电力(HYDELEY)-无功补偿元器件生产厂家-二十年专业从事电力电容器 | 山东艾德实业有限公司 | 大白菜官网,大白菜winpe,大白菜U盘装系统, u盘启动盘制作工具 | 提升海外网站流量,增加国外网站访客UV,定制海外IP-访客王 | 济南画室培训-美术高考培训-山东艺霖艺术培训画室 | 广州展台特装搭建商|特装展位设计搭建|展会特装搭建|特装展台制作设计|展览特装公司 | 布袋除尘器-单机除尘器-脉冲除尘器-泊头市兴天环保设备有限公司 布袋除尘器|除尘器设备|除尘布袋|除尘设备_诺和环保设备 | 桁架机器人_桁架机械手_上下料机械手_数控车床机械手-苏州清智科技装备制造有限公司 | 在线浊度仪_悬浮物污泥浓度计_超声波泥位计_污泥界面仪_泥水界面仪-无锡蓝拓仪表科技有限公司 | 通风天窗,通风气楼,屋顶通风天窗,屋顶通风天窗公司 | 棉服定制/厂家/公司_棉袄订做/价格/费用-北京圣达信棉服 | 国际线缆连接网 - 连接器_线缆线束加工行业门户网站 | 磷酸肌酸二钠盐,肌酐磷酰氯-沾化欣瑞康生物科技 | 企业管理培训,企业培训公开课,企业内训课程,企业培训师 - 名课堂企业管理培训网 | 合肥花魁情感婚姻咨询中心_挽回爱情_修复婚姻_恋爱指南 | 不锈钢闸阀_球阀_蝶阀_止回阀_调节阀_截止阀-可拉伐阀门(上海)有限公司 | 能耗监测系统-节能监测系统-能源管理系统-三水智能化 | 山东信蓝建设有限公司官网| 专业的新乡振动筛厂家-振动筛品质保障-环保振动筛价格—新乡市德科筛分机械有限公司 | 同步带轮_同步带_同步轮_iHF合发齿轮厂家-深圳市合发齿轮机械有限公司 | 地图标注-手机导航电子地图如何标注-房地产商场地图标记【DiTuBiaoZhu.net】 | 山西3A认证|太原AAA信用认证|投标AAA信用证书-山西AAA企业信用评级网 | 橡胶接头_橡胶软接头_套管伸缩器_管道伸缩器厂家-巩义市远大供水材料有限公司 | 废水处理-废气处理-工业废水处理-工业废气处理工程-深圳丰绿环保废气处理公司 |