初始化参考成员本身合法吗?

Edd*_*onk 14 c++

这是我在使用Valgrind的服务器应用程序中发现的错误.

struct Foo
{
    Foo(const std::string& a)
        : a_(a_)
    {
    }
    const std::string& a_;
};
Run Code Online (Sandbox Code Playgroud)

与gcc -Wall你没有得到警告.为什么这个合法代码?

jan*_*nks 2

你所拥有的违反了8.3.2/4 A ... reference shall be initialized to refer to a valid object or function。所以这肯定是非法的。

请注意,并非所有错误程序都需要由编译器检测到,尽管老实说我认为这是其中之一。

就其价值而言,打开最大编译器警告的 g​​++ 版本 4.4.1 很乐意接受该程序,而不会发出警告:

int main(void)
{   
    int *p = 0;
    *p = 5;
}
Run Code Online (Sandbox Code Playgroud)