我有几个关于在C++中抛出异常的问题.据我所知,他们......
可以从main()函数中抛出异常.任何可以在main()函数中抛出异常的代码块都应该被try和catch语句包围,如下所示
void foo(//args) {
if (...) {
throw "Error reached";
} ...
int main() {
...
try {
//Code that can throw an excpetion
} catch(const char* msg) (
cerr << msg << endl;
}
...
}
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,为什么catch的参数是一个const char*.C++不允许字符串吗?另外,是否可以抛出一个不是const char*的异常,就像一个int?还是一个炭火?
在foo中抛出异常,终止foo函数?
是否有可以将try和catch语句放在与throw相同的函数中的情况?
对不起,如果这些是基本问题.谢谢你
我正在为学校作业编写一个 C++ 程序。在某些时候,这个问题要求我更改目录,我知道该怎么做。但是,用户将为程序提供文件的绝对路径。我想做的是将目录更改为该文件所在的位置。例如,如果我在目录 dir2 中,并且用户想要转到该文件
/home/dir1/dir2/dir3/dir4/file
Run Code Online (Sandbox Code Playgroud)
我想要做
int ret = chdir("home/dir1/dir2/dir3/dir4");
Run Code Online (Sandbox Code Playgroud)
我的问题是如何将用户给定的字符串拆分为
/home/dir1/dir2/dir3/dir4/
Run Code Online (Sandbox Code Playgroud)
和
file
Run Code Online (Sandbox Code Playgroud)
编辑我想通了。我首先将绝对路径名从 const char* 转换为字符串。然后我使用 .find_last_of("/") 字符串成员来查找字符串中最后一个“/”的位置。然后我使用 .substr() 成员获取从 0 到 .find_last_of 返回的位置的子字符串
所以我有一个有两个例外的程序。在这两种情况下,我都想抛出一个可以在主函数中捕获并在错误消息中使用的字符串。然而,据我所知
try {
...
} catch(string msg) {
cerr << "..." << msg << "..." << endl;
} catch (string msg2) {
cerr << "..." << msg2 << "..." << endl;
}
Run Code Online (Sandbox Code Playgroud)
不允许。有什么办法可以做到以上或类似的事情吗?谢谢