メインコンテンツ

AUTOSAR C++14 Rule A4-10-1

Only nullptr literal shall be used as the null-pointer-constraint

説明

ルール定義

nullptr リテラルのみを null ポインター定数として使用するものとします。

根拠

nullptr は、有効なオブジェクトを指していないポインターの概念をサポートするために C++11 で導入されました。C++11 より前は、マクロ NULL と定数 0 が null ポインター定数を定義する唯一の方法でした。nullptr を使用して null ポインターを指定する方が、NULL0 を使用するより多くのメリットがあります。次に例を示します。

  • nullptr は、暗黙的キャストを使用しなくても、任意の型の null ポインターで使用することができます。

  • nullptr リテラルは、テンプレート関数を使用したパラメーター転送を可能にします。

NULL は、void* 型にキャストされた整数 0 に展開されるマクロです。NULL または 0 を使用して null ポインターを指定することは、開発者が想定している動作の反対です。nullptr を期待していたコードが、代わりに、NULL または 0 を検出した場合は、混乱または予期せぬ動作につながる可能性があります。

Polyspace 実装

Polyspace® は、null ポインターを指定するための nullptr の代わりに NULL または 0 が使用されていた場合にフラグを設定します。このルールは、NULL0 の間の変換はチェックしません。AUTOSAR C++14 Rule M4-10-1を参照してください。

トラブルシューティング

ルール違反が想定されるものの、Polyspace から報告されない場合は、コーディング規約違反が想定どおりに表示されない理由の診断を参照してください。

すべて展開する

#include <cstdint>
#include <cstddef>


void foo(int*);
void foo2(int*);

void bar() {
    foo(NULL);    //Noncompliant
    foo2(0);      //Noncompliant
    foo(nullptr); //Compliant
}

この例では、マクロ NULL または定数 0 が nullptr の代わりに null ポインターとして使用された場合に、ルールに違反します。

チェック情報

グループ: 標準変換
カテゴリ: Required、Automated

バージョン履歴

R2020a で導入