-5

如何创建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 *?
}

只是出于好奇。

4

3 回答 3

4

最简单的是使用花括号:

 bar({});

using声明:

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

sehe只是让我想起了 , 和 的愚蠢而明显nullptr0答案NULL

bar(nullptr);

而且我敢肯定还有更多的方法。

GCC 允许您使用复合文字,但从技术上讲这是不允许的

 bar((int*){});

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

于 2015-01-29T01:38:11.327 回答
0

只是为了好玩,您可以尝试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

于 2015-01-29T01:45:05.003 回答
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
于 2015-01-29T01:48:58.697 回答