C++结构体初始化断言失败

3
#include <cassert>
#include <string>
struct AStruct 
{ 
    int x; 
    char* y; 
    int z; 
};
int main()
{ 
    AStruct structu = {4, "Hello World"};
    assert(structu.z == ???);
}

我应该在???的位置写什么才能成功断言呢?
我使用了assert(structu.z == 0);,但是不幸的是出现了错误:
int main(): Assertion 'structu.z == 0 failed.Aborted'

你想要测试什么?除非你想要断言某些内容,否则不需要编写断言! - Eser Aygün
这不是一个真正的问题。已投票关闭。 - Prasoon Saurav
3
这不是一个真正的问题吗?他提出了一个明确定义的问题,其答案可验证 - +1,并欢迎来到stackoverflow! - Eamon Nerbonne
我刚刚尝试将 ??? 替换为 0,代码成功运行了,你使用的是哪个编译器? - Nicklas A.
1
@Nicklas:它必须是一个有问题的,因为提供的代码不应该触发那个断言。 - Oliver Charlesworth
显示剩余11条评论
3个回答

5

You want:

 assert(structu.z == 0);

您的代码将值赋给了z成员而不是对其进行测试。如果您确实收到了编辑后的问题中提到的消息,那么您的编译器可能存在问题。请问您使用的是哪个编译器?


3
@Neo:我不相信assert(structu.z == 0)会给你这个信息:Assertion: structu.z = int() failed... - Oliver Charlesworth
3
为什么其他给出相同回答的答案被点赞,而这个回答却被踩了? - user2100815

3

如果你说“成功”,我理解为不会出现错误信息。你可能需要这样做:

assert(structu.z == 0);

请注意我使用的是==而不是=
这个断言应该永远不会触发,因为根据给出的代码,structu.z保证等于0

3

assert(structu.z == 0) 应该能够正常工作,因为成员变量 z 将被值初始化。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接