首页 > 解决方案 > 这个带有默认参数的 c++ 代码如何编译?

问题描述

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

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 上工作。

标签: c++windowscompilation

解决方案


我认为这是一个我们可以谈论的 mcve:

#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)被称为。thenobfs被调用, finallyobfs被从(a->writemem(file, mem, memSize), obfs)to传递obfs2


推荐阅读