C C 小括號中為何不能宣告變數的同時對其賦值?

時間 2021-05-12 00:23:16

1樓:笑眯眯

C++ Primer:

if (( char ch = inBuf[ix] ) == '.' ) {

ch = '_';

inBuf[ix] = ch;

2樓:lihui

是可以宣告的,只是用法錯誤了,正確的應該是這樣的 :(); 這是GCC 的乙個擴充套件,術語叫:Statement-embedded expression (內嵌語句表示式),具體用法可參考:

3樓:

誰說不行呢?

if(int c = get())}

4樓:黃亮anthony

在命令式語言中,我們主要使用語句,表示式只是一種語法糖,它沒有必要過於強大。

我認為最原始的問題可能來自於我們可以在for/while/switch的小括號中宣告變數,但是不能在這些語句之外引入括號中宣告變數。

事實上這個問題我認為這個設計主要解決變數的作用域問題,也就是說變數的作用域應該大於表示式,才不違反直覺(估計最初只是為了編譯方便)。如a + (int a = 3) + a, 這個三個a表達什麼含義呢?如果中間的a只在括號內有作用,那其實沒有必要在表示式內宣告。

如果在整個表示式都有效,那麼第乙個a和最後乙個a是否表示不同的變數?

假定我們可以做到在表示式中宣告變數,事實上我們需要這樣的語法:

(int a, b in some express)

這確實c++不支援的,因為從C開始,這就是一種命令式語言,它主要是依靠修改

變數的值來解決問題。C++的表示式的能力有限,只不過它支援一種非常類似的東西:

這個與上面唯一不同的地方只有它是乙個語句,不是乙個表示式。

反過來,我們再看for/while/switch,很明顯,它們也是語句。

5樓:邱昊宇

簡單解釋:因為遊戲規則是這樣規定的,所以不行。(好吧,其實是 C++ 的語法規則)

詳細解釋:

C++ 語法規則中的語句分為很多類,問題中主要關注的兩類是:宣告語句(6.7)表示式語句(6.2)

宣告語句由宣告(7)構成,表示式語句由表示式(5)構成宣告沒有被括號括起來的形式的語法

我們印象中 x + 1 和 (x + 1) 等價的印象來自於表示式的語法(5.1.1)

一條語句只屬於乙個型別(不可能既是宣告語句,還是表示式語句)p.s. 文中括號中的數字表示 C++11 標準文件中的章節號。

修行為何不能上路?

修行之路有很多條,你想上哪條路?一心念佛號,也是修行之路。日行一善,也是修行之路。拜名師求正信也是修行之路。潛心於佛法典籍也是修行之路。做好本人的社會角色和家庭角色也是修行之路。 福馬林 如果要找一種修行方法的話,推薦看聖嚴寫的 無法之法 或者葛印卡的 內觀 然後參加禪七或者十日內觀禪修營。不過 內...

《知否》中墨蘭為何不能給梁晗做妾

風安 做了妾就是奴隸,把女兒賣成奴隸,盛巨集和他兒子在朝堂上要臉面不要?書裡說了,盛巨集若是有這個心思,以明蘭的姿色教養,做個側妃也是夠格的。墨蘭雖然不如明蘭漂亮,但也不會淪落到給梁府做妾的地步。 Venus 有一段賀家哥那個表妹.姨娘和明蘭的對手戲 明蘭問姨娘,表妹進門就是妾,妾就是奴,那妾的父母...

股東為何不能抽逃出資?

商務律師 張寅 要回答股東為何不能抽逃出資,有必要先了解中國 公司法 所採用的公司資本制度。目前,西方國家已經形成的有法定資本制度 授權資本制度和折衷資本制度三種。法定資本制度又稱為確定資本制,是指公司在設立時,必須在章程中對公司的資本總額作出明確規定,並須由股東全部認足,否則公司不能成立。授權資本...