C++ 如何对指针使用统一初始化?

C++ 如何对指针使用统一初始化?,c++,initialization,C++,Initialization,例如,我有一门课 struct A { A(int i, double d) {...} }; 和一个带有参数a的函数 void f(A a); 我可以通过 f( { 1, 3.14 } ); 如果函数有一个参数A* void g(A* a); 如何让它像打电话一样 g( my_new{1, 3.14} ); // Note: no type A is shown here. 或者如何在这里导出类型A 你不能采取一个临时地址“直接”。。。 您不能使用&获取临时地址: g(&am

例如,我有一门课

struct A
{
    A(int i, double d) {...}
};
和一个带有参数a的函数

void f(A a);
我可以通过

f( { 1, 3.14 } );
如果函数有一个参数A*

void g(A* a);
如何让它像打电话一样

g( my_new{1, 3.14} ); // Note: no type A is shown here.
或者如何在这里导出类型A

你不能采取一个临时地址“直接”。。。 您不能使用
&
获取临时地址:

g(&({1, 3.14})); 
根据:

§5.3.1/3

一元运算符&的结果是指向其操作数的指针操作数应为左值或限定id。

(强调矿山)

... 但是你可以间接的! 例如,可以使用函数提取指向临时对象的指针:

A* fn(A&& a) {
    return std::addressof(a);
}
并将其用作:

g(fn({1, 4.0}));
请注意,
std::addressof
是避免类
A
可能出现的
运算符&
重载所必需的。 您还可以通过类
a
的成员函数以及可能的许多其他方式来提取它

<强>为什么突然的意见改变?< /强>我和其他C++仇恨者有着明显的可能性,而且完全合法。< /P> 我推荐什么 我建议

g
使用
const
参考:

void g(const A& a);
然后:

g({1, 3.14});

将很好地工作(当然,假设构造函数不是显式的)。

只是一个猜测,因为我现在不能尝试它,但可能:
g(&({1,3.14}))可能是您感兴趣的。若要初始化指针,您需要在某处获取左值。所以可能不会。这似乎不可能,你用它能实现什么,也许你能得到一些帮助。投票结束,因为你不清楚你在问什么。很久以前,我看到一个很好的错误连接在提取常量指针。。。在函数中,在本例中获取int*a,与本例中的非常量一样,存在
*a++
。猜猜看。。。将“0”传递给函数会导致每次使用“0”常量时都使用“1”代替“0”!所以我想说。。。“你可以间接地”但我强烈建议不要这样做。@Sigismondo我支持这一点。