gpt4 book ai didi

c++ - 为什么不能在类主体中分配变量?

转载 作者:太空宇宙 更新时间:2023-11-03 10:39:54 24 4
gpt4 key购买 nike

我是 C++ 的新手,我想知道为什么在下面的代码中,变量 xyz 可以这样赋值

class Fraction {
public:
int num, denom;
int xyz = 0;

// Constructors
Fraction() {
num = 0;
denom = 1;
}

Fraction(int n, int d) {
num = n;
denom = d;
}
};

但是如果这样写

class Fraction {
public:
int num, denom;
int xyz;
xyz = 0;

// Constructors
Fraction() {
num = 0;
denom = 1;
}

Fraction(int n, int d) {
num = n;
denom = d;
}
};

返回编译错误,即:

error: C2059: syntax error: '='

error: C2238: unexpected token(s) preceding ';'

最佳答案

xyz = 0 是一个赋值表达式。在 C++ 中表达式可以出现在许多上下文中,但是当涉及到生成可执行代码的普通表达式时,它们只能出现在初始化器语句中。语句基本上是 C++ 语言中可执行代码的主要示例。在 C++ 语言中,可执行代码(即语句)应该写​​在函数内部。这就是语言的工作原理。

因此,在您的情况下,以某种方式在函数外部“植入”您的表达式的唯一方法是在初始化器 中使用它。例如你可以做这样的事情

struct S
{
int a;
int b = (a = 42);
};

但这个技巧很丑陋,不明智,据我所知没有任何有意义的应用。

您的第一个语法是初始化语法。 = 符号不是赋值运算符,而只是初始化语法的句法元素。即使在这种情况下,实际的初始化代码最终也会成为构造函数 代码的一部分。因此,即使是该代码最终也将成为函数的一部分。

关于c++ - 为什么不能在类主体中分配变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42992526/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com