當我寫的東西是這樣的:範圍語法
int data[] = {10,44,56,78,8};
int i = 0;
for(int element : data)
...
是for
然後由編譯器在常規for
翻譯?那for
只是一個語法糖嗎?
當我寫的東西是這樣的:範圍語法
int data[] = {10,44,56,78,8};
int i = 0;
for(int element : data)
...
是for
然後由編譯器在常規for
翻譯?那for
只是一個語法糖嗎?
該標準定義了基於範圍的for
聲明等同於:
{
auto && __range = range-init;
for (auto __begin = begin-expr,
__end = end-expr;
__begin != __end;
++__begin) {
for-range-declaration = *__begin;
statement
}
}
在你的情況,range-init
是(data)
,begin-expr
爲__range
,end-expr
是__range + 5
,for-range-declaration
是int element
和statement
是...
。無論這種轉換實際上是由編譯器完成
{
auto && __range = (data);
for (auto __begin = __range,
__end = __range + 5;
__begin != __end;
++__begin) {
int element = *__begin;
...
}
}
是一個實現細節:也就是說,如果我們替換了所有這些,你for
循環相當於。你唯一能保證的是你的代碼將等同於上面的代碼。
你可以在你的問題上更清楚一點嗎?你的編譯器是否拒絕那個語法?如果是這樣,你使用的是哪種編譯器?如果GCC,您是否使用'-std = C++ 0x'標誌來啓用C++ 11功能? –
是的,我可以。不,我的編譯器沒有拒絕這種語法。我只想知道這是否是由編譯器翻譯的。 – xdevel2000
如果它被翻譯成傳統的語法,那又如何?無論編譯器如何內部表示命令的結構,您都不會看到翻譯,並且代碼將執行相同的操作。編譯器是否將新的for語句表示爲傳統格式的轉換或完全獨立的語句,有什麼不同? –