5

機能を考えると:

template <class T> void f(const T* const ptr);

Tのためf(nullptr)ですか?

4

1 に答える 1

5

私はこれに答えなければならないでしょう。§2.14.7/1から(強調鉱山):

ポインタリテラルはキーワードnullptrです。これは、タイプstd::nullptr_tのprvalueです。[注:std :: nullptr_tは、ポインター型でもメンバー型へのポインターでもない別個の型です。むしろ、このタイプのprvalueはnullポインター定数であり、nullポインター値またはnullメンバーポインター値に変換できます。

T *である必要がstd::nullptr_tあり、std::nullptr_tはポインタ型ではないため、それは不可能ですGCC 4.7.2でそれを呼び出そうとすると、呼び出しようとしてnullptrいたことを示すエラーが発生しますがf(std::nullptr_t)、があっただけです。これは、aがではないf(const T *)という事実と一致します。std::nullptr_tT *

于 2013-03-03T03:57:06.907 に答える