这是我在使用Valgrind的服务器应用程序中发现的错误.
struct Foo
{
Foo(const std::string& a)
: a_(a_)
{
}
const std::string& a_;
};
Run Code Online (Sandbox Code Playgroud)
与gcc -Wall你没有得到警告.为什么这个合法代码?
你所拥有的违反了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)