Rob*_*son 22 c++ compiler-warnings
刚从编译器收到此函数的警告:
template<class T>
Matrix3x3<T> & operator - (Matrix3x3<T> const & p)
{
auto m = Matrix3x3<T>(p);
m.m11 = -m.m11; m.m12 = -m.m12; m.m13 = -m.m13;
m.m21 = -m.m21; m.m22 = -m.m22; m.m23 = -m.m23;
m.m31 = -m.m31; m.m32 = -m.m32; m.m33 = -m.m33;
return m;
}
Run Code Online (Sandbox Code Playgroud)
,我想知道为什么返回局部变量或临时的地址不值得一个错误.是否有必须这样做的情况?这只是"未定义的行为"而不是语言约束的理由是什么?
我什么都想不到.
原因:生成编译器错误时缺乏一致性.
在您的直接案例中,编译器实际上有助于生成警告.把它视为奖励.
但请查看下面的情况,编译器无法识别此问题:
int& foo ()
{
int i = 1;
static int j;
return i? i : j; // No warning in g++-5!
}
Run Code Online (Sandbox Code Playgroud)
现在从编译器的角度来看,如果它为一个案例提供错误并且在其他情况下由于代码的复杂性而导致鸡出错则不合理.
这种编译器限制的一个用例可以是@tsuki很好地建议的"随机数生成".
| 归档时间: |
|
| 查看次数: |
4417 次 |
| 最近记录: |