我不知道C++編譯器是否會像基於範圍的循環一樣展開基於範圍的循環,它們與「正常」循環相同,以最大限度地提高性能,或者在某些情況下,基於範圍的循環會比正常循環慢?C++ 2011:基於範圍的循環展開?
非常感謝。
我不知道C++編譯器是否會像基於範圍的循環一樣展開基於範圍的循環,它們與「正常」循環相同,以最大限度地提高性能,或者在某些情況下,基於範圍的循環會比正常循環慢?C++ 2011:基於範圍的循環展開?
非常感謝。
用於基於範圍的環等同於:
{
auto && __range = (/expression/);
for (auto __begin = begin(__range),
__end = end(__range);
__begin != __end;
++__begin) {
/declaration/ = *__begin;
/statement/
}
}
如果編譯器知道迭代的數量和它可以解決循環依賴性或環是獨立的,則編譯器可以自由地取消輥。
一般來說,循環展開只會改善較小循環的性能。所以,國際海事組織,基於範圍的循環是否展開並不重要。當然,您可以使用-O3
和-funroll-loops
以及相關選項進行基準測試,看看兩者之間是否確實存在差異。
編譯器有可能將基於範圍的for循環轉換爲它們的常規循環對象,所以我期望它們是等價的。
編譯器有可能將基於範圍的for循環轉換爲它們的常規循環對象,所以我期望它們是等效的。 –
@ K-ballo:也許你應該將此作爲答案? –