抛出(NULL)无法识别
Throw(NULL) unrecognized
在C++程序中,是否有除NULL
、null
或nullptr
以外的词,因为throw(NULL)
returns错误:
../../test.cpp:6:9: error: use of undeclared identifier 'NULL' : throw(NULL);
如果这是您的代码,请抛出您要抓到的任何东西。
这是一个示例,int 0,来自 http://www.cplusplus.com/doc/tutorial/exceptions/
int main () {
try
{
throw 20;
}
catch (int e)
{
cout << "An exception occurred. Exception Nr. " << e << '\n';
}
return 0;
}
如何使用NULL
NULL 实际上不是核心 C 或 C++ 语言的一部分。它在 cstddef
或 stddef.h
.
中定义
另一方面,从 c++11 开始,nullptr
是关键字,不需要 header。由于您使用的是 C++,因此更喜欢 nullptr,它是一个关键字,并且是类型化的。
如何使用抛出
避免抛出 NULL
或 nullptr
,而更喜欢抛出从 std::exception.
派生的 class 的 object
NULL
是宏,定义在stddef.h
或cstddef
;你必须
包含这些文件之一以获取它。
但真正的问题是:你想要吗?异常被捕获
类型,并且未指定 NULL
的类型。它必须是一个整体
类型,但它可以是任何整数类型;实际上,我只见过 int
和 long
,但所有其他的都是可能的。那你打算怎么办
抓住了吗?
虽然您应该能够抛出 (NULL
、null
、nullptr
) 中的任何一个,但您可能会问自己要完成什么。 NULL 通常解析为定义为 0 的整数。这偶尔会导致混淆和意外结果,这正是 c++11 中出现 nullptr
关键字的原因。它是表示不会与整数混淆的空指针的独特类型。
如果您尝试抛出和捕获整数,throw( 0 );
。如果你试图抛出并捕获空指针,void* p = nullptr; throw( p );
.
关键字 nullptr
无需包含即可工作。 NULL
,在我的 linux 框中,在 stddef.h 中定义。
此示例代码片段可能说明:
try {
throw( NULL );
}
catch( long e ) {
cout << "caught long " << e << endl;
}
try {
void* p = nullptr;
throw( p );
}
catch( long e ) {
cout << "caught long " << e << endl;
}
catch( void* p ) {
cout << "caught ptr" << endl;
}
catch( ... ) {
cout << "caught unk" << endl;
}
输出为:
caught long 0
caught ptr
在C++程序中,是否有除NULL
、null
或nullptr
以外的词,因为throw(NULL)
returns错误:
../../test.cpp:6:9: error: use of undeclared identifier 'NULL' :
throw(NULL);
如果这是您的代码,请抛出您要抓到的任何东西。
这是一个示例,int 0,来自 http://www.cplusplus.com/doc/tutorial/exceptions/
int main () {
try
{
throw 20;
}
catch (int e)
{
cout << "An exception occurred. Exception Nr. " << e << '\n';
}
return 0;
}
如何使用NULL
NULL 实际上不是核心 C 或 C++ 语言的一部分。它在 cstddef
或 stddef.h
.
另一方面,从 c++11 开始,nullptr
是关键字,不需要 header。由于您使用的是 C++,因此更喜欢 nullptr,它是一个关键字,并且是类型化的。
如何使用抛出
避免抛出 NULL
或 nullptr
,而更喜欢抛出从 std::exception.
NULL
是宏,定义在stddef.h
或cstddef
;你必须
包含这些文件之一以获取它。
但真正的问题是:你想要吗?异常被捕获
类型,并且未指定 NULL
的类型。它必须是一个整体
类型,但它可以是任何整数类型;实际上,我只见过 int
和 long
,但所有其他的都是可能的。那你打算怎么办
抓住了吗?
虽然您应该能够抛出 (NULL
、null
、nullptr
) 中的任何一个,但您可能会问自己要完成什么。 NULL 通常解析为定义为 0 的整数。这偶尔会导致混淆和意外结果,这正是 c++11 中出现 nullptr
关键字的原因。它是表示不会与整数混淆的空指针的独特类型。
如果您尝试抛出和捕获整数,throw( 0 );
。如果你试图抛出并捕获空指针,void* p = nullptr; throw( p );
.
关键字 nullptr
无需包含即可工作。 NULL
,在我的 linux 框中,在 stddef.h 中定义。
此示例代码片段可能说明:
try {
throw( NULL );
}
catch( long e ) {
cout << "caught long " << e << endl;
}
try {
void* p = nullptr;
throw( p );
}
catch( long e ) {
cout << "caught long " << e << endl;
}
catch( void* p ) {
cout << "caught ptr" << endl;
}
catch( ... ) {
cout << "caught unk" << endl;
}
输出为:
caught long 0
caught ptr