如何编译带有默认参数的c ++代码?

时间:2018-06-08 01:46:42

标签: c++ windows compilation

这是一个简单的示例程序,演示了我想要的内容:

class A {
public:
    int writemem(FilInfo* file, IN BYTE* mem, IN DWORD memSize, BYTE obfs=0, BOOL bEnc=TRUE);
};

void main() {
...
    (this->writemem(file, mem, memSize), obfs); // does not print compilation error!
...
}

以上代码如何编译?编译上述程序虽然不符合我的预期,但仍然是成功的。 我正在使用VisualStudio SDK 7.1开发Windows 8.1。

1 个答案:

答案 0 :(得分:-1)

我认为这是我们可以讨论的一个问题:

#define IN 
struct FilInfo {};
struct DWORD {};
struct BYTE {
    BYTE() {}
    BYTE(int i) {}
    BYTE(const BYTE& i) {}
};
enum BOOL {
    TRUE,
    FALSE
};

class A {
public:
    int writemem(FilInfo* file, IN BYTE* mem, IN DWORD memSize, BYTE obfs=0, BOOL bEnc=TRUE) {return 0;}
};

int main() {
    FilInfo* file;
    BYTE* mem;
    DWORD memSize;
    BYTE obfs;
    A* a;
    BYTE obfs2 = (a->writemem(file, mem, memSize), obfs); // does not print compilation error!

    return 0;
}

为什么会产生编译器错误或警告?此代码有效。

(a->writemem(file, mem, memSize), obfs)是一个由逗号运算符分隔的两个语句组成的语句。变量名是有效的声明。

首先调用a->writemem(file, mem, memSize)。然后调用obfs,最后obfs(a->writemem(file, mem, memSize), obfs)传递到obfs2