为什么我不能在C ++中做到这一点?
struct SomeStruct
{
public:
SomeStruct(const int someInt)
{
m_someInt = someInt;
}
private:
const int m_someInt;
};
私有字段应为正整数吗?
答案 0 :(得分:9)
您正在将someInt
分配给m_someInt
,这是非法的。但是初始化是可以的。
struct SomeStruct
{
public:
SomeStruct(const int someInt) : m_someInt(someInt)
{
}
private:
const int m_someInt;
};
答案 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
。