c++11 std - nullptr

717 ワード

テストコード:
#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*ポインタであり、他のポインタのコピーに対して自動的に対応するポインタタイプに変換されます.