c++ 该使用类内初始值么?
c++ 該使用類內初始值么?
我們c++老師說類聲明里不要出現定義,類內初始值是不標準的寫法,他應該覺得下面這么寫才對
class Foo { public:Foo();Foo(int); private:int num; }; Foo():num(0){} Foo(int i):num(i){}我這么寫
class Foo { public:Foo()=default;Foo(int i):num(i){} private:int num = 0; };不好么,我覺得省了好多代碼,而且類成員名字長的話省得就更多了
想問一下類內初始值是不是不標準,用了會有什么影響,如果對性能什么的有影響是在哪里出現的?
PS:老師知道這是c++11新加的特性,他沒說這樣錯了,只是說不標準,會影響性能
9 個回答
藍色
?
C++、編程語言、編程
話題的優秀回答者
如果這都能有性能影響,這簡直是對我們C++編譯器開發者的一種侮辱。
發布于 2015-02-10
匿名用戶
c++11的標準你跟我說不標準?學校教一套自己用一套好了。
發布于 2015-02-09
木頭云
只是一只程序員
首先,你的寫法是標準的。
然后,你老師說“會影響性能”,可能是覺得類內初始化的時間點有可能在構造初始化之前,導致兩次賦值浪費性能,當然實際上編譯器一般不會這么愚蠢。。
?
你老師的寫法勝在兼容性好,編譯器適應廣,而且所有賦值的地方都是統一的(都在構造函數里),代碼結構好的話修改比較方便。
你的寫法勝在碼字少,層次清晰(default下類內初始化,特殊情況構造初始化)。
?
我覺得這兩種寫法各有優缺點。真在實際環境里,需要根據類的設計來決定如何取舍的,不能說哪種一定更好,或哪種一定不能用。
發布于 2015-02-10
騰訊視頻
廣告?
知乎廣告介紹
毫不夸張的說今天騰訊視頻VIP這個活動有點“喪心病狂”了!
原價198元的騰訊視頻VIP年卡,現僅需98元,特權享不停,海量片庫隨心看,廣告說聲bye,一大波福利向你襲來查看詳情
做游戲的老G
游戲開發者/理性消費者/鄙視生編硬造的段子和廢話一堆的長篇
#define GE_V_IMPLEMENT_REF(varType, varName, varValue) \
public: virtual const varType& get##_##varName(void) const { return varName; } \
public: virtual void set##_##varName(const varType& var){ varName = var; } \
protected: varType varName =varValue;
發布于 2015-02-11
dc lin
你老師是不是建議.hpp和.cpp文件分開?如果是的話我想應該不同寫法會影響編譯器的效率吧
發布于 2015-02-25
丁煜
通信工程師
構造函數使用類內初始值是一種好的選擇,因為這樣的初始值存在就能確保為成員賦予一個正確的值。但是有的編譯器卻不支持類內初始值,那么這個時候所有構造函數都應該顯示的初始化每個內置類型成員。出于這個考慮,就不推薦類內初始值。
發布于 2015-08-17
謝孔葉
C++11新標準,跟Java很像吧,我覺得挺方便的,不知道有什么性能影響
發布于 2015-08-10
趙佳更
左手少年右手酒.醒碼代碼夢寫詩.
換個老師就不影響性能了.不過這種寫法,老代碼,老編譯器可能會不支持.但是那種極端情況應該不是學生應該考慮的事情了.
編輯于 2018-05-07
landerl young
Android極客,現任騰訊Android高級工程師。
感覺上寫C++很大一部分時間都花在了過分關注性能上,不該優化的地方絞盡腦汁的優化。。。。
發布于 2015-02-11
總結
以上是生活随笔為你收集整理的c++ 该使用类内初始值么?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 为了在 Windows 上安装 GCC
- 下一篇: 你是如何坚持读完《算法导论》这本书的?(