c++ - Const 类成员复制构造函数

标签 c++ constructor copy

#include "booking.h"
#include <iostream>
booking::booking (  const std::string p_title,  const std::string p_notice,  const category p_category,  const person p_person,  const booking::Type p_type,  const double p_value ) :
m_type{ p_type },
m_title{ p_title },
m_notice{ p_notice },
m_person{ p_person },
m_category{ p_category },
m_value { p_value }
{
    std::cout << "Booking was created" << std::endl; // Debug Message
}

这些是文件(我认为需要知道的一切)

#pragma once
#include <string>
#include "person.h"
#include "category.h"
class booking
{
public:
    enum Type { TYPE_REVENUE, TYPE_EXPENDITURE };
    booking ( const std::string p_title, const std::string p_notice, const category p_category, const person p_person, const booking::Type p_type, const double p_value ); //Basic Constructor
    ~booking();
    Type GetType ( );
    std::string GetTitle ( );
    std::string GetNotice ( );
    category GetCategory ( );
    double GetValue ( );

private:
     Type m_type;
     std::string m_title;
     std::string m_notice;
     category m_category;
     person m_person;
     double m_value;

};

如果我将其中一个类成员(如 m_type 或 double 值,哪个并不重要)设置为 const,它会抛出以下错误:

Fehler 1 error C2280: booking &booking::operator =(const booking &) : attempting to reference a deleted function C:\Program Files (x86)\Microsoft Visual C++ Compiler Nov 2013 CTP\include\utility 53

我不明白为什么编译器会提示复制构造函数以及根本问题是什么。

最佳答案

您不能(合理地)分配给具有 const 成员的类的对象。

这就是为什么您会收到关于复制赋值运算符的错误。

您不会收到有关复制构造函数的投诉。


在其他新闻中:

  • 在 C++ 中,所有大写名称是宏的约定。如果它们用于其他用途(例如常量,如在 Java 中),那么您会增加名称冲突和无意文本替换的风险。除了它很碍眼之外,许多人还认为它特别强调。 Java 没有预处理器。 C++ 确实有一个。

  • 通常将非基本类型的参数作为对 const 的引用传递是个好主意(您只添加了 const)。对于复制的大参数,有一些额外的注意事项。在 C++11 中,这些最好按值传递并移动。

  • 应该将简单的“getter”成员函数声明为 const,以便可以在 const 对象上调用它们。

关于受 Java 启发的 Get 前缀,请考虑 GetSin(u)+GetCos(v)sin(u)+cos(v)。在 Java 中,Get 前缀对于使用内省(introspection)的工具可能具有一定的值(value)。 Java有内省(introspection)。 C++ 没有内省(introspection)。所采用的约定应更好地适应所使用的语言。

关于c++ - Const 类成员复制构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26131921/

相关文章:

ruby-on-rails - 破解 i18n 系统来生成 <p> 标签是个坏主意吗?

iOS:如何复制带有字体的文本

c++ - volatile 是在 C/C++ 中生成单字节原子的正确方法吗?

c++ - Qt 无法从继承类访问 *ui 指针

gruntjs - grunt.file.copy 排除空文件夹

c++ - 将数据成员的生命周期限制为一种方法

Java - 为构造函数的每个实例定义不同的变量?

c++ - 与创建模板类相关的错误

c++ - 在 Windows 控制台中显示 unicode 棋子

c++ - 以基实例为参数的派生类的构造函数