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++对此有着不同的设定。为了程序的健壮性,最好还是在构造函数内初始化所有值。

clang++和g++编译行为差异

上一篇:剑指 Offer 57. 和为s的两个数字


下一篇:解决 VS Code 无法使用Ctrl+C等快捷键