Как создать временное значение с инициализацией T*
в стандарте C ++?
void foo( int );
void bar( int * );
int main()
{
foo( int() ); // works. a temporary int - value initialized.
bar( ??? ); // how to create a temporary int *?
}
Просто из любопытства.
Проще всего использовать фигурные скобки:
bar({});
Или using
заявление:
using p = int*;
bar( p() ); // how to create a temporary int *?
sehe просто напомнил мне о глупо очевидном ответе nullptr
, 0
, а также NULL
,
bar(nullptr);
И я уверен, что есть еще много способов.
GCC позволяет использовать составные литералы, но технически это запрещено
bar((int*){});
Просто для удовольствия, вы можете попробовать typedef
:
#include <iostream>
void foo( int ) {}
typedef int* PtrInt;
void bar( PtrInt p )
{
std::cout << "The value of p is " << p;
}
int main()
{
foo( int() );
bar( PtrInt() );
}
Живой пример: http://ideone.com/sjOMlj
Почему бы просто не использовать что-то вроде этого:
int i=0;
bar(&i); // safe to dereference in bar()
Или вы ищете лайнер? Если это так, вы можете использовать какое-то хмурое литье, но потом bar()
не должно на самом деле разыменовать этот указатель:
bar((int*)0); // or use nullptr if your C++ compiler is more recent