为什么可以';我在结构构造函数中赋值常量int吗? 为什么我不能在C++中这样做?< /P> struct SomeStruct { public: SomeStruct(const int someInt) { m_someInt = someInt; } private: const int m_someInt; };

为什么可以';我在结构构造函数中赋值常量int吗? 为什么我不能在C++中这样做?< /P> struct SomeStruct { public: SomeStruct(const int someInt) { m_someInt = someInt; } private: const int m_someInt; };,c++,C++,私有字段是否应该是一个正则整数?您正在将someInt赋值给m_someInt,这是非法的。但是初始化是可以的 struct SomeStruct { public: SomeStruct(const int someInt) : m_someInt(someInt) { } private: const int m_someInt; }; 更多信息:值不能分配给常量存储。它只能初始化。对于类成员变量,它将在初始化列表中完成 struct SomeStruc

私有字段是否应该是一个正则整数?

您正在将
someInt
赋值给
m_someInt
,这是非法的。但是初始化是可以的

struct SomeStruct
{
public:
    SomeStruct(const int someInt) : m_someInt(someInt)
    {

    }

private:
    const int m_someInt;
};

更多信息:

值不能分配给
常量
存储。它只能初始化。对于类成员变量,它将在初始化列表中完成

struct SomeStruct
{
public:
    SomeStruct(const int someInt) : m_someInt(someInt)
    {

    }

private:
    const int m_someInt;
};
有时,类内初始化就足够了:

template <int  Val>
struct SomeStruct
{
public:

private:
    const int m_someInt = Val;
};

在你的例子中,
m_someInt=someInt
是一个在
=
之前需要左值的语句,
m_someInt
不是一个合法的左值,因为它是
const

const
成员只能在成员初始值设定项列表中初始化:(或使用C++11之后的默认值)不能分配给
const int
,句点。如果你不希望你的私有字段是常量,不要让它成为常量。这也是为什么你不能做
const int i;i=1
// 1) Declaring storage of int object that initially  contains value 5
int a = 5; // It's a declaration.

// 2) Declaring storage of int object that contains undetermined value
int b; // Declaration 
b = 5; // Assigning a value to it. It's a statement.