这是一个相当简单的问题,但不知何故很难找到一个简单的答案。
在C ++中,(编辑)const修改的struct变量和(edit :)非const struct变量之间的区别是什么,但是struct具有all-const成员? :
typedef struct mystruct {
const int x;
} t1;
const t1 s1;
VS
typedef struct {
int x;
} t2;
const t2 s2;
? (如果答案是“与课程相同”,那么请为课程解释或链接到解释。)
答案 0 :(得分:6)
没有const struct
这样的东西。您可能已经看到过类似的内容:
const struct {
int x;
} y;
这是一个带结构类型的变量y
的声明。变量y
是const
,而不是结构。你可以认为它类似于:
struct mystruct {
int x;
};
const mystruct y;
不给结构类型命名。
答案 1 :(得分:4)
假设
const struct mystruct1 {
int x1;
int x2;
} s1;
和
struct mystruct2 {
const int x1;
int x2;
} s2;
对于s1
,您不应为任何成员分配值。
对于s2
,不应仅为成员x1
分配值。一个人可以免费为x2
这样做。
为了更接近你的例子,可以做:
typedef const struct mystruct1 {
int x1;
int x2;
} S1;
typedef struct mystruct2 {
const int x1;
int x2;
} S2;
S1 s1;
S2 s2;
对于s1
和s2
,此处适用与上述相同的规则。
<强> Upate 强>:
从字面上引用你的问题(暗示我的例子中的修正),两个结构之间在它们携带的值的恒定性方面没有实际差异。
答案 2 :(得分:3)
下面的两个对象a
和b
之间的 有效差别很小:
struct A
{
int x, y;
};
struct B
{
const int x, y;
};
const A a; // (plus initialiser)
B b; // (plus initialiser)
(当然,您知道 A
的其他实例可能不是const
- 合格,然后您就会有明显的区别。)
在一种情况下,您无法以不同的方式访问成员。但是:
const
- 确定类型(而不是成员)会影响引用绑定:
void foo(A& a);
void foo(B& b);
int main()
{
const A a;
B b;
foo(a); // Error!
foo(b); // OK
}
当然,如果您使用指针而不是引用,情况也是如此。 const
上下文仅在应用于类型时传播到调用代码,而不是封装在成员中。