C++之间的区别是什么?
try { /*some code here*/}
catch(MyException& ex)
{ throw ex;} //not just throw
Run Code Online (Sandbox Code Playgroud)
和
try { /*some code here*/}
catch(MyException& ex)
{ throw;} //not throw ex
Run Code Online (Sandbox Code Playgroud)
它只是在堆栈跟踪中(在C++中,在任何情况下都不是C#或Java中的标准)?
(如果它有任何区别,我使用MSVS 2008.)
我遇到了一个我不明白的问题,我希望这里有人可以提供一些见解.简化代码如下(原始代码是自定义队列/队列迭代器实现):
class B
{
public:
B() {};
class C
{
public:
int get();
C(B&b) : b(b){};
private:
B& b;
};
public:
C get_c() { return C(*this); }
};
int main()
{
B b;
B::C c = b.get_c();
c = b.get_c();
return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)
编译时,这会给我以下错误:
foo.cpp: In member function 'B::C& B::C::operator=(const B::C&)':
foo.cpp:46: error: non-static reference member 'B& B::C::b', can't use default assignment operator
foo.cpp: In function 'int main()':
foo.cpp:63: note: synthesized method 'B::C& B::C::operator=(const B::C&)' first required here
Run Code Online (Sandbox Code Playgroud)
我可以通过使用两个单独的C变量解决这个问题,因为它们应该是独立的'C'对象,但这只能隐藏问题(我仍然不明白为什么我不能这样做).
我认为原因是参考不能被复制,但我不明白为什么.我是否需要提供自己的赋值运算符和复制构造函数?