clang++和g++編譯行為差異


class A {
public:
    A():aa(42) {
        std::cout <<"My aaa=> uninitialize:" aaa << std::endl;
        aaa = aa;
        std::cout <<"My aaa=> " aaa << std::endl;
    }
private:
    long long aa;
    long long aaa;
    char
};

分別編譯這段代碼結果如下:

g++ clang++
long long aaa => 0 aaa => 948888123213
char 0 0
char* 0 0x3228f100

由此可見,c++關於class member的初始化之前的動作視編譯器而定。
可以推測,g++通常會把數值類型和指針置位0,clang++對此有着不同的設定。為了程序的健壯性,最好還是在構造函數內初始化所有值。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM