簡體   English   中英

在C ++中推薦的++或+1是什么?

[英]What is recommended ++ or +1 in C++?

S++S=S+1 ,可以建議將值遞增1,為什么?

我認為S++應該是首選,因為它是內部的單機指令(INC)。 如果我錯了,請讓我糾正。 其他方式我認為兩者都是相同的,除了++是一元的,它的后增量和運算符重載是不同的。

C#會有什么不同嗎?

你永遠不應該嘗試做這樣微小的優化。 對於幾乎所有情況,現代編譯器都足夠智能,可以為所有3個選項( ++ii+=1i=i+1 )生成相同的匯編代碼。

是的,有時你可以獲得一些微小的性能提升,例如,對於某些具有非常復雜的++運算符的類使用前綴++而不是后綴,但在絕大多數情況下,花費大部分時間的程序的一部分不是增量,所以要獲得一些實際結果,您應該在真實(或接近真實)測試中分析您的代碼,並找到不太有效的常用代碼片段。

此外,還有一個更重要的事情需要考慮 - 它的代碼可讀性。 在絕大多數情況下,它比性能更重要,只有在時間最關鍵的代碼片段中,我們才能犧牲性能的可讀性(甚至在那里,並非總是如此!有時候最好只添加更多硬件)。

因此,我的建議是使用以最清晰的方式陳述您的想法的選項

回到過去,這種事情有所不同。 我曾經查看生成的機器代碼,然后調整C源以獲得額外10%的速度提升。

不再。 您無法通過查看機器代碼來預測速度。

  • 如今,許多優化都是在CPU中完成的。
  • IL代碼在運行時再次針對其運行的處理器進行優化,因此作為開發人員,您永遠不會看到執行的指令。
  • CPU非常快,幾乎不重要。

您可以嘗試測試不同的遞增方式,看看哪個更快。 一旦你對此感到厭倦,就不要再擔心速度,而是集中精力編寫清晰,無錯誤的代碼。

C ++有前置和后置增量運算符
預增運算符通常更快,因為已經回答了這里
(主要是因為編譯器可以更好地優化它,並且它不需要返回舊值的臨時副本)。

在通過執行s = s + 1 OR s ++遞增變量s之間,我們首先需要接受操作本身是非常基本,簡單和直接的。 我們基本上將存儲在變量中的值遞增固定數。 即使s ++比s = s + 1更快地執行,這兩種不同方法之間的時差也是相同的。 我嘗試了以下代碼:

    int s = 1;
    s++;

它給出了以下編譯和執行時間:

編譯時間:0.32秒,絕對運行時間:0.14秒,CPU時間:0秒,內存峰值:3 Mb,絕對服務時間:0,46秒

之后,我嘗試了以下代碼:

    int s = 1;
    s = s + 1;

它給出了以下執行時間:

編譯時間:0.32秒,絕對運行時間:0.14秒,CPU時間:0秒,內存峰值:3 Mb,絕對服務時間:0,46秒

所以,正如我所說,兩個操作之間沒有顯着差異,因為它們本身非常簡單。 存在時差; 但是,上面給出的執行時間並不是那么具體,這意味着必須有一個> 0.001的時間差,它幾乎可以忽略不計。 希望這能回答你的問題。

++更強大。 你可以做那樣的事情

if(a++ > 7) b=0;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM