c 迴圈中定義區域性變數會消耗更多步驟嗎?

時間 2021-06-03 02:32:38

1樓:朱涵俊

C的話一樣快。

C++就不一定了,一切皆有機關。

迴圈裡面定義變數,意味著每次迴圈都呼叫建構函式,析構函式。

#include

using namespace std;

class IamI

;~IamI() ;

};int main()

}./a.out

created

byebye

created

byebye

created

byebye

created

byebye

created

byebye

created

byebye

created

byebye

created

byebye

created

byebye

created

byebye

2樓:大哥哥

基礎型別的變數建立是基本沒有開銷的,如果是類,結構體等複雜變數的建立是有開銷的,所以兩個方法對於int這種基礎型別來說,是一樣的。

3樓:arrayJY

Compiler Explorer跑一下,gcc x86 10.1:

第一種:

.L2mov DWORD PTR [rbp-4], 1

mov eax, DWORD PTR [rbp-4mov esi, eax

mov edi, OFFSET FLAT:_ZSt4cout

call std::basic_ostream >::operator<<(intmov esi, OFFSET FLAT:

_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6mov rdi, rax

call std::basic_ostream >::operator<<(std::

basic_ostream >& (*)(std::basic_ostream >&jmp .L2

第二種:

.L2mov DWORD PTR [rbp-4], 1

mov eax, DWORD PTR [rbp-4mov esi, eax

mov edi, OFFSET FLAT:_ZSt4cout

call std::basic_ostream >::operator<<(intmov esi, OFFSET FLAT:

_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6mov rdi, rax

call std::basic_ostream >::operator<<(std::

basic_ostream >& (*)(std::basic_ostream >&jmp .L2

完全一模一樣啊!

4樓:Muchan

首先這叫定義變數……

區域性變數無論作用域,都會在剛進函式時就分配好空間,不會使執行棧頂上上下下♂

事實上把定義寫在裡面明確地表示了不會用到這個變數在上次迴圈中的值,資料流比較複雜的情況下甚至是有利於編譯器作出相關優化的。

web前端for迴圈中settimeout的問題?

walker2016 都沒答到點子上,題主的問題是把第二個引數i乘以1000都當做是乙個閉包來使用。然而事實情況是,settimeout函式本身是立即執行的,所以你傳給他的i 1000的i也是立即變為當前的i去定時!而callback才是真正的延時執行,並且不一定是間隔1s,你可以輸出到毫秒級別會發...

海洋在大氣碳迴圈中起到了多大的作用?

123沒想法 1.大氣中的二氧化碳與陸地植被和海洋之間交換的通量最大。2.作為地球表面最大的碳源,大洋中所溶解的二氧化碳是大氣中二氧化碳含量的五十倍,海洋對大氣中二氧化碳的吸收是平衡大氣中二氧化碳的重要因素。海洋生物利用海洋中所溶解的二氧化碳進行光合固碳作用,其中一部分生物的殘體分解釋放出二氧化碳,...

又回到了分手 孤單 失落 痛苦的迴圈中,陌生人能否請給我一點安慰和開導?每天真的好傷心好痛苦

落無根 安慰永遠都是多餘的,它只會延緩你的傷疤癒合。就像你摔傷了,只需要把傷口處理包紮好,剩下的一切都交給時間,而不是每天揭開紗布看看傷口癒合的進度。所以,能幫到你的,只有時間和你自己。請記住,你的傷心痛苦,只有你自己知道。深夜你輾轉反側,世界早已經睡熟了。陌生人,請愛自己,加油。 悟道 如果戀人不...