#include <iostream>
int a = 9;
int *p;
p = &a;
int fun();
int main()
{
std::cout << fun();
return 0;
}
int fun()
{
return *p;
}
为什么此代码会出错:
期望构造函数,析构函数或 '='标记|
之前的类型转换
这段代码运行正常:
#include <iostream>
int a = 9;
int *p = &a;
int fun();
int main()
{
std::cout << fun();
return 0;
}
int fun()
{
return *p;
}
答案 0 :(得分:12)
您可以全局声明和初始化变量/类型而不是分配它们
main()
是C ++程序的开始,而assign语句必须在main中。
C ++ 03标准:部分$ 3.6.1 / 1 :
程序应包含一个名为 main 的全局函数,它是程序的指定开始。
如果您来自脚本背景,您应该注意到C ++与脚本语言的不同之处在于您可以在指定的程序开始(main()
)范围之外声明项目,但是您不能执行任何操作处理(转让或其他陈述)。
答案 1 :(得分:5)
答案 2 :(得分:2)
关于语言的一个令人困惑的事情:两个使用相同运算符的基本结构,=,意味着不同的东西。
在第一种情况下,=只是初始化语法的一部分,它实际上不是operator =,因为它不是赋值,尽管结果(后置条件)是相同的:变量最终得到那个价值。它是如何到达那里的。