久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

在 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?(如何從交換機內部跳出循環?)
主站蜘蛛池模板: 天天干,夜夜操 | 国产精品自拍一区 | 69av在线视频 | av免费在线播放 | 欧美寡妇偷汉性猛交 | 国产精品96久久久久久 | 亚洲一区视频在线 | 久久九九网站 | 精品免费 | 亚洲草草视频 | 日韩电影一区二区三区 | 国产精品永久免费视频 | 国产中文字幕在线观看 | 久久久99精品免费观看 | 精品久久久久久久久久久久久久久久久 | 久久精品亚洲国产 | 国产成人精品久久二区二区91 | 中文字幕日韩一区 | 在线播放精品视频 | 久久这里只有精品首页 | 日日天天 | 国产98色在线 | 日韩 | 欧美日韩国产精品激情在线播放 | 亚洲视频在线看 | 一区二区三区av夏目彩春 | 亚洲精品一区二区冲田杏梨 | 亚洲三区在线观看 | 久久在线 | 99热在线观看精品 | 91在线观看免费 | 天天天堂| 欧美精品久久久 | a国产视频 | 亚洲人成人一区二区在线观看 | 99久久久久| 日日网 | 在线精品亚洲欧美日韩国产 | 国产精品视频在线观看 | 日韩欧美精品在线 | 91私密视频 | 国产精品久久av |