为什么不能在struct构造函数中分配const int?

时间:2018-08-11 09:18:07

标签: c++

为什么我不能在C ++中做到这一点?

struct SomeStruct
{
public:
    SomeStruct(const int someInt)
    {
        m_someInt = someInt;
    }

private:
    const int m_someInt;
};

私有字段应为正整数吗?

2 个答案:

答案 0 :(得分:9)

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

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

    }

private:
    const int m_someInt;
};

更多信息:Constructors and member initializer lists

答案 1 :(得分:0)

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

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;
};

通常的混淆是由于程序员看不到两种情况之间的差异:

// 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.

在您的情况下,m_someInt = someInt;是一个期望在=前使用左值的语句,而m_someInt不是合法的左值,因为它是const