基元到用户定义的构造分配
Primitive to user defined assignment on construction
很抱歉标题模糊,我似乎错过了一些东西。
我对发布这个犹豫不决,因为它看起来很基本,但我无法让它工作。我的 IDE 告诉我以下内容不正确。我有一个名为IRatio的类,我想与长双精度互换。
class
IRatio
{
protected:
long double
mValue;
public:
IRatio();
IRatio(
const IRatio& ir);
IRatio(
const long double& ld);
IRatio&
operator=(
const IRatio& ir);
IRatio&
operator=(
const long double& ld);
operator long double() const;
};
现在我知道以下行有效:
IRatio n1(0.01f);
IRatio n2;
n2 = 0.02f;
但是,令我完全惊讶的是,这一行不起作用:
IRatio n3 = 0.03f;
我如何让它工作?我假设在这种情况下调用了复制构造函数?或者即使是分配运算符,我也不介意!我知道std::string可以做到。
std::string s = "hello!";
谢谢
您的代码应该按原样工作。也就是说,IRatio
不会自行管理任何资源,因此您不需要复制构造函数和赋值运算符。这应该可以做到:
struct IRatio {
IRatio() : d(0L) { }
IRatio(long double d) : d(d) { }
operator long double() const { return d; }
private:
long double d;
};
int main(int argc, char* argv[])
{
IRatio r = 0.02f;
return 0;
}
你的代码应该可以工作了。但是,0.03f
属于 float
型。你想说0.03L
说long double
.但这在这里不一定重要,float
可以转换为long double
.
是的,带有参数 const long double&
的构造函数将用于创建一个临时 IRatio
对象,该对象将被复制到 n3
中(并且您的编译器应该优化副本,因此您可能不会在此处看到复制构造函数调用,除非您告诉它不要优化)。
相关文章:
- 自定义先决条件对移动分配运算符有效吗
- C++ - 没有自定义交换功能的移动分配运算符?
- 将 RTOS 队列对象封装在仅具有静态分配的 IQueue 自定义接口中
- 具有自定义构造函数 (C++) 的类型的动态数组分配
- 自己的自定义向量类. 内存重新分配
- 在 for 循环中定义的临时数组,并分配给属于指针数组的指针
- 如何定义全局函数指针并分配给特定地址
- shared_ptr的删除程序是否存储在自定义分配器分配的内存中?
- 当存在用户定义的移动分配运算符时,已删除模板移动分配运算符
- 为什么我需要将默认引用参数定义为 const 以便为其分配一个左值?
- 动态分配自定义类的数组和重载运算符
- 如何在没有动态内存分配(堆)的情况下为可变大小数组(矢量)定义安全容器或视图
- =删除用户定义的成员功能,除了构造函数,分配运算符C 11
- 为什么要对堆栈中的内存使用自定义动态内存分配?
- 自我分配变量的定义
- 如何将wchar_t字符串分配给用户定义类的 CString 成员
- 未定义 Lambda 复制分配运算符
- 如何使用boost ::与扩展STL容器的自定义容器分配
- 是否可以为 #define 分配定义的结果?
- 内存分配定义一个矩阵结构