c++ - 这个带有默认参数的 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 上工作。
解决方案
我认为这是一个我们可以谈论的 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
。
推荐阅读
- c# - 如何使用 ssis 脚本任务动态地将 sql server 表导出到 MS-access?
- java - 通过灰度减小图像尺寸
- java - 如何在android中使arraylist的arraylist可打包
- c++ - Eigen:获取稀疏矩阵的核
- python-3.x - 使用 python3.4 的 xmlrpc.server 保持 tcp 连接打开
- swift - 重用 Storyboard ViewController - 父/子视图控制器
- sql - 选择返回最后一天的结果,星期一不返回星期五
- javascript - 如何循环嵌套 Json 访问所有对象的相同元素?
- siddhi - Siddhi - 使用 javascript 扩展来查询表
- set - 我收到一条错误消息:“D 已定义”但我无法解决