none
nullptrとNULL RRS feed

  • 質問

  • いつもお世話になっております。

    Win32 API関数を使うときは、「NULL」と「nullptr」どちらを使うほうがよいのでしょうか?

    コードの好き嫌いの問題でしょうか?(もちろん、一貫性を持たせます)

    現状、nullptrを使用しております。

    例:

     ::CoInitialize( NULL );
     ::CoInitialize( nullptr );
    
     IFileOpenDialog * fileOpenDialog = NULL;
     IFileOpenDialog * fileOpenDialog = nullptr;
    
     ::CoCreateInstance( __uuidof( FileOpenDialog ), NULL, ... );
     ::CoCreateInstance( __uuidof( FileOpenDialog ), nullptr, ... );
    
    
    2011年2月23日 6:06

回答

すべての返信

  • Code上はどちらでも良いです。
    でも、nullptrの方がNULL Pointer値を表現するKeywordですし、良いのかなと思います。
    (NULLは0でdefineされていますね)

     Visual StudioのVersionによっては、少し注意が必要です。以下が参考になります。

    [nullptr]
      http://msdn.microsoft.com/en-us/library/4ex65770.aspx

    [C++0x features in VC2010 - nullptr]
      http://blogs.msdn.com/b/xiangfan/archive/2010/05/10/c-0x-features-in-vc2010-nullptr.aspx

    [nullptr and __nullptr Keywords]
      http://msdn.microsoft.com/ja-jp/library/dd465215.aspx
      (※2010の場合、Native専用の__nullptr Keywordもあり、状況によっては使い分ける必要が出てくるかもしれません。)

    • 回答としてマーク dsa_ma 2011年2月24日 6:09
    2011年2月23日 10:06
  • こちらも。

     Visual C++ - Visual Studio 2010 の C++ と MFC での新機能の詳細
     http://msdn.microsoft.com/ja-jp/magazine/ee336130.aspx

    NULL は互換性のために残っているけど、将来を考えると nullptr と書いておくにこしたことはない、ということでしょうか。

    • 回答としてマーク dsa_ma 2011年2月24日 6:10
    2011年2月23日 10:30
  • 返信ありがとうございます。大変勉強になります。

    これからもnullptrまたは__nullptrを使用していきます。

    3つ目の[nullptr and __nullptr Keywords]で質問があります。

     

    Native専用とは、CLIを使用していないコードという理解でよいでしょうか?

    それとも、C/C++ランタイムさえ使用していないコードになるのでしょうか?

    Native: マシン固有の機械語になるコード?

    2011年2月24日 1:56
  • 返信ありがとうございます。

    nullptrまたは__nullptrを使用します。

    よい情報ありがとうございます。

    2011年2月24日 2:01
  • >Native専用とは、CLIを使用していないコードという理解でよいでしょうか?
    そうです。

    NativeもCLIもnullptrで統一してよいです。Link先の記述に該当する場合は、使い分ける必要が出てくるかもしれませんが、それは稀です。Comipleが通らなくなった場合に、気にすれば(__nullptrを思い出してくれれば)良いです。

    2011年2月24日 11:25