Dre*_*kes 1 c++ gcc compiler-warnings c++11
我有一个错误的复制构造函数导致的错误,它从自身初始化它的字段:
Foo(const Foo& rhs)
: bar(bar) // error
{}
Run Code Online (Sandbox Code Playgroud)
显然这应该是:
Foo(const Foo& rhs)
: bar(rhs.bar)
{}
Run Code Online (Sandbox Code Playgroud)
是否有可以检测到这种情况的编译器诊断?这段代码有可能有意义吗?
-Winit-self 似乎没有抓住这一点.
编辑
感谢永远的代码示例是显示警告是由GCC 4.9.2提供的,我挖得更深一些,以确定为什么我没有看到一个.
事实证明,它取决于被复制字段的类型.
class A
{
public:
A(const A&) : a(a), b(b), c(c) {}
private:
int a;
int* b;
int& c;
};
Run Code Online (Sandbox Code Playgroud)
此代码仅提供有关a(按值复制)和b(通过指针)的警告,但不提供c(通过引用).
现在已知这一点,是否仍然有理由期待GCC将自我引用的初始化视为一个问题?
Clang确实将所有这三个标识为警告,提供b:
在此处使用时,引用'b'尚未绑定到某个值
编辑我在GCC的bug跟踪器中打开了一个问题:
| 归档时间: |
|
| 查看次数: |
806 次 |
| 最近记录: |