如何为指针使用统一初始化
How to use uniform initialization for a pointer?
例如,我有一个类
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
一元&Operator是指向其操作数的指针。操作数必须为左值或限定id。
(强调我的)
…但是你可以间接地做到!
例如,可以使用一个函数来提取指向临时对象的指针:
A* fn(A&& a) {
return std::addressof(a);
}
,并将其用作:
g(fn({1, 4.0}));
注意std::addressof
是必要的,以避免A
类可能的operator&
过载。您也可以通过类A
的成员函数或许多其他方法提取它。
为什么突然改变意见?嗯,我已经和其他讨厌c++的人讨论过了,显然这是可能的,而且完全合法的。
我的建议
我建议g
参考const
:
void g(const A& a);
然后:
g({1, 3.14});
可以正常工作(当然,假设构造函数不是显式的)。
相关文章:
- 分段错误 - 读取初始化指针的数组
- 初始化指针的常量向量
- 初始化指针或引用成员变量以指向另一个成员
- C++初始化指针/引用/复制细微差别
- 使用无效指针初始化指针声明符的行为是否未定义?
- 在一行中初始化指针(新uint8_t[高度*宽度*3])
- 如何使用可变模板初始化指针?
- 初始化指针时出现写入访问冲突
- C 错误,带有卷曲括号的字面初始化指针
- 重新初始化指针是一种不好的做法吗?
- 初始化指针?C
- 初始化指针向量的向量
- 如何在类函数中正确初始化指针
- C++初始化指针会使应用程序随机崩溃
- 初始化指针结构 - 内存中的外观
- 如何使用struct构造函数在结构中初始化指针阵列
- 在一行中声明并初始化指针到类实例
- 分配数组与初始化指针
- QT 中的非初始化指针
- 使用地址值初始化指针