указатели — Как создать временное значение, инициализированное T * в Standard-Stack Overflow

Как создать временное значение с инициализацией 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 *?
}

Просто из любопытства.

-5

Решение

Проще всего использовать фигурные скобки:

 bar({});

Или using заявление:

using p = int*;
bar( p() );    // how to create a temporary int *?

sehe просто напомнил мне о глупо очевидном ответе nullptr, 0, а также NULL,

bar(nullptr);

И я уверен, что есть еще много способов.

GCC позволяет использовать составные литералы, но технически это запрещено

 bar((int*){});

http://coliru.stacked-crooked.com/a/7a65dcb135a87ada

5

Другие решения

Просто для удовольствия, вы можете попробовать 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

0

Почему бы просто не использовать что-то вроде этого:

int i=0;
bar(&i);  // safe to dereference in bar()

Или вы ищете лайнер? Если это так, вы можете использовать какое-то хмурое литье, но потом bar() не должно на самом деле разыменовать этот указатель:

bar((int*)0); // or use nullptr if your C++ compiler is more recent
0
По вопросам рекламы [email protected]