c++11 std - nullptr
717 ワード
テストコード:
出力結果:
void*:test = 0
int:test = 0
int:test = 0
分析:
この問題は、実際の適用中にf関数パラメータが0またはNULLまたはコンパイラによってデフォルトでintとされている場合、void f(void*test)を呼び出して強制変換(void*)0または(void*)NULLを加える場合に解決されます.
これにより、可読性が悪くなるか、制性変換を強化することを忘れてバグを直接導入する.
上記の問題を解決するためにC++標準はnullptrキーワードを導入し、実際にはconstのvoid*ポインタであり、他のポインタのコピーに対して自動的に対応するポインタタイプに変換されます.
#include
#include
#include
#include
#include
using namespace std;
void f(int test);
void f(void* test);
int main(int argc, char *argv[])
{
f(nullptr);
f(NULL);
f(0);
while(1);
return EXIT_SUCCESS;
}
void f(int test)
{
cout<
出力結果:
void*:test = 0
int:test = 0
int:test = 0
分析:
この問題は、実際の適用中にf関数パラメータが0またはNULLまたはコンパイラによってデフォルトでintとされている場合、void f(void*test)を呼び出して強制変換(void*)0または(void*)NULLを加える場合に解決されます.
これにより、可読性が悪くなるか、制性変換を強化することを忘れてバグを直接導入する.
上記の問題を解決するためにC++標準はnullptrキーワードを導入し、実際にはconstのvoid*ポインタであり、他のポインタのコピーに対して自動的に対応するポインタタイプに変換されます.