C和C++中未定义,未指定和实现定义的行为有什么区别?
c c++ undefined-behavior unspecified-behavior implementation-defined-behavior
休息:我不认为这实际上是同一个问题,另一个问题是关于手动调用析构函数的一般问题。这是在类本身内部的创建过程中。仍然想知道执行此操作时会发生什么,如下面的问题所述。
起初,我认为这很糟糕,真的很糟糕。只需分析这两个人编写的构造函数的这段代码(请参见下文),并需要将其转换为Delphi对象Pascal。它的行为必须与C版本相同。我不喜欢这种风格,非常丑陋,但是没关系。
另一件事,在代码的两个阶段中,当失败时会调用析构函数(我想关闭连接,但是删除后会自动调用析构函数,为什么还是要这样做呢?)。我认为这不是做到这一点或错过某些东西的方法吗?
另外,在调用析构函数之后,他们想抛出一个异常(是吗?),但是我认为这将永远不会执行,并且当您手动访问或删除它时会导致另一个异常。
Serial::Serial(
std::string &commPortName,
int bitRate,
bool testOnStartup,
bool cycleDtrOnStartup
) {
std::wstring com_name_ws = s2ws(commPortName);
commHandle =
CreateFileW(
com_name_ws.c_str(),
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
0,
NULL
);
if(commHandle == INVALID_HANDLE_VALUE)
throw("ERROR: Could not open com port");
else {
// set timeouts
COMMTIMEOUTS timeouts;
/* Blocking:
timeouts.ReadIntervalTimeout = MAXDWORD;
timeouts.ReadTotalTimeoutConstant = 0;
timeouts.ReadTotalTimeoutMultiplier = 0;
Non-blocking:
timeouts = { MAXDWORD, 0, 0, 0, 0}; */
// Non-blocking with short timeouts
timeouts.ReadIntervalTimeout = 1;
timeouts.ReadTotalTimeoutMultiplier = …Run Code Online (Sandbox Code Playgroud) 我找到了关于java的这个问题的一些答案,但没有特别关于c ++.所以我在Java中读到了首先创建对象,然后调用构造函数.我想知道这是否与c ++相同?此外,如果是这种情况,那么拥有默认构造函数有什么意义呢?是继承目的吗?
我有个问题。我必须在构造函数 One() 中抛出一个异常,但不知道我该如何捕捉它。有人可以建议吗?我试过这个方法:从构造函数抛出异常,如果构造函数抛出异常会发生什么?
我的代码:
class One
{
int a, b;
public:
One()
{
a = 7;
b = 0;
if (b == 0)
{
throw "except";
}
}
};
int main()
{
One j;
try
{
cout << "good";
}
catch(const char *str)
{
cout << str;
}
}
Run Code Online (Sandbox Code Playgroud) c++ ×4
constructor ×2
c ×1
c++14 ×1
destructor ×1
exception ×1
implementation-defined-behavior ×1
windows ×1