C++中如何编写验证构造函数传入vector的assert断言语句?
解决assert比较vector时的参数错误问题
问题出在assert是预处理器宏,它会把逗号当成参数分隔符。你写的assert(u->getFriends() == vector<size_t> {0, 1, 2})里,初始化列表的逗号会被宏解析成多个参数,导致报错。
有两种简单的解决方法:
方法1:给整个比较表达式加括号
把整个判断表达式用括号包裹,让预处理器把括号内的内容当成单个参数:
assert( (u->getFriends() == std::vector<std::size_t>{0, 1, 2}) );
方法2:提前定义预期的vector变量
先把预期的好友列表存入一个变量,再在assert中比较,避免表达式里出现逗号:
std::vector<std::size_t> expected_friends{0, 1, 2}; assert(u->getFriends() == expected_friends);
两种方法都能解决参数数量错误的问题,第二种还能让代码更清晰,尤其是预期列表较长的时候。
内容的提问来源于stack exchange,提问作者Hayoung Ryow
相关产品推荐
相关产品推荐

