【发布时间】:2016-02-25 12:06:36
【问题描述】:
我遇到了这段代码,对于输入“bad”,它不能正常工作,我知道原因,但我不明白。我想问题出在创建对象时。可以给我解释一下吗?
--已编辑。抱歉,我把 & 放在了没有的地方。 常量 std::string& _badString; --> 这就是问题所在。如果您使用参数 'bad' 运行它,则会捕获异常,但是在打印应该是 'bad' 的字符串时,它只会打印垃圾。
#include <iostream>
#include <string>
namespace
{
const std::string bad = "bad";
}
class MyException
{
const std::string& _badString;
public:
MyException(const std::string& s):
_badString(s)
{
}
auto badString() const
{
return _badString;
}
};
template<typename Arg>
void interpretArg(Arg arg)
{
if (arg == bad)
{
throw MyException(arg);
}
}
int main(int argc, char** argv)
{
for (int i = 0; i < argc; ++i)
{
try
{
interpretArg(argv[i]);
}
catch(const MyException& e)
{
std::cerr << "badString: " << e.badString() << std::endl;
}
}
}
【问题讨论】:
-
我们如何知道对您来说“正常工作”意味着什么?
-
好吧,我的意思是正确的。当参数为“坏”时,它应该捕获异常并打印“坏”