C++ 能否以某种方式接受 'auto' 的这种用法?:
class A {
public:
A(): m_member(new auto)
{
[...]
}
private:
BoringToTypeType *m_member;
}
目的是通过简化 A 的构造函数中的成员元素初始化来利用“auto”。实际上,代码会引发以下错误:
new expression for type 'auto' requires a constructor argument.
最佳答案
new auto(...)
从内部传递的表达式推断结果指针的类型 (...)
.在您的特定情况下,没有什么可以推断出来的。
您有几个选择:
m_member(new auto(x))
, 其中x
是BoringToTypeType
类型的表达式.m_member(new std::remove_pointer_t<decltype(m_member)>)
,这肯定不是对BoringToTypeType
的改进.
如果您不介意定义一个额外的辅助函数,这里有一个替代解决方案:
template <typename T, typename... TArgs>
auto newer(T*, TArgs&&... args)
{
return new T(std::forward<TArgs>(args)...);
}
class A
{
public:
A(): m_member(newer(m_member, 12))
{
}
private:
int *m_member;
};
在这种情况下 T
纯粹用于类型推导目的。 m_member
必须重复两次,但您可以避免以这种方式输入其类型。
Simple tests on godbolt.org表明 newer
不会产生任何额外开销。
关于c++ - C++ 构造函数中的 'new auto',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41442202/