如果给定的用户输入无效,我写了一些遇到异常的代码,所以我把它放在try/catch块中,但它仍然引发异常.代码本身很长,所以这里是代码的简化版本,也遇到了异常.异常本身很清楚,位置"3"不存在,所以它会抛出一个异常,但它在try/catch块内,所以它应该被捕获,但事实并非如此.
int main() {
try
{
vector<string> test = vector<string>{ "a","b","c" };
string value = test[3];
}
catch (...)
{
}
}
Run Code Online (Sandbox Code Playgroud)
运行此代码只会导致以下异常,无论它是否在try/catch块中.

我也试过指定异常(const out_of_range&e),但这也没有帮助.它只是引起了完全相同的异常.
int main() {
try
{
vector<string> test = vector<string>{ "a","b","c" };
string value = test[3];
}
catch (const out_of_range&e)
{
}
}
Run Code Online (Sandbox Code Playgroud)
我正在使用Visual Studio,这可能是IDE或它使用的编译器的问题吗?
在C#中创建一个字符串时,你string foo = "bar";要将字符串作为一个类,并使用=运算符将值"bar"传递给类.怎么做的?你能在自己的班上做这件事吗?
我知道这在C++中是可行的.
class someClass {
public:
someClass(int someInt) {
// Do Stuff
}
};
int main() {
someClass classInst = 123;
}
Run Code Online (Sandbox Code Playgroud)
但是C#会等同于什么?
我写了一个程序,它在 C++ 和 C# 中运行一个简单的 for 循环,但在 C# 中同样的事情花费的时间要长得多,这是为什么?我在测试中没有考虑到某些事情吗?
C# (13.95s)
static double timeStamp() {
return (double)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds;
}
static void Main(string[] args) {
double timeStart = timeStamp();
string f = "";
for(int i=0; i<100000; i++) {
f += "Sample";
}
double timeEnd = timeStamp();
double timeDelta = timeEnd - timeStart;
Console.WriteLine(timeDelta.ToString());
Console.Read();
}
Run Code Online (Sandbox Code Playgroud)
C++ (0.20s)
long int timeStampMS() {
milliseconds ms = duration_cast<milliseconds> (system_clock::now().time_since_epoch());
return ms.count();
}
int main() {
long int timeBegin = timeStampMS();
string test …Run Code Online (Sandbox Code Playgroud) c# ×2
c++ ×2
constructor ×1
exception ×1
for-loop ×1
operators ×1
performance ×1
visual-c++ ×1