我遇到了一个奇怪的问题。当我尝试编译自我分配对象引用时,我的编译器(针对ESP32)不会显示任何错误或警告。我调查了这个问题,并发现一些编译器不会为这段代码显示任何错误或警告:
#include <iostream>
#include <string>
class Foo
{
public:
std::string s;
Foo(){ std::cout << "Foo()\n"; }
std::string ToString() { return s; }
};
class Bar
{
public:
Foo& foo;
Bar(): foo(foo) { std::cout << "Bar()\n"; }
std::string ToString() { return foo.ToString(); }
};
int main()
{
Bar bar;
std::cout << "START\n" << bar.foo.ToString() << "\nEND\n";
}
只有clang会显示有关自赋值的警告,但即使如此,它显然应该是一个错误。是否存在某种情况,使得这种行为合法?
int& x = x;
一个引用指向它自己。 - Nikos C.