C++出现C26495警告不知如何解决,附相关代码求定位问题原因
警告触发根源
C26495是Visual Studio自带的C代码规范检查(对应C核心准则type.6规则)的警告,核心要求是类的所有非静态成员变量必须在构造时完成初始化,你的代码漏了两个成员的初始化:
- 指针数组
Card* cards[13]完全没有初始化,所有元素都是野指针 - int类型的
current成员也没有初始化,值为不确定的垃圾值
你当前的构造函数只给suit赋值,剩下两个成员都处于未初始化状态,因此触发了该警告。
修复方案
推荐两种合规的修复方式:
方式1:用构造函数初始化列表完成初始化
Foundation::Foundation(char suit) : current(0), suit(suit) { // 把指针数组所有元素初始化为空指针 for (int i = 0; i < 13; ++i) { cards[i] = nullptr; } }
方式2:C++11及以上版本直接在类内加默认初始值(更简洁)
class Foundation { Card* cards[13] = {nullptr}; // 数组所有元素默认初始化为空指针 int current = 0; // 默认初始化为0 char suit; // 其余类成员保持原有代码不变即可 };
两种方式都能保证所有成员有确定的初始值,不会再触发C26495警告。
内容的提问来源于stack exchange,提问作者Longting Tin.
相关产品推荐
相关产品推荐

