日期:2014-05-17  浏览次数:20963 次

C# const赋值
const int a=1;
const int b=math.sin(a);


为什么会给出b的赋值错误?

const后面能跟什么运算符?是不是只能是+、—、*、/吗?

------解决方案--------------------
http://msdn.microsoft.com/zh-cn/library/system.math.sin.aspx
math.sin是返回指定角度的正弦值。参数必须为Double类型(以弧度计量的角度。)
而你的参数是整形,自然报错

const参考:
const数据成员只在某个对象生存期内是常量,而对于整个类而言却是可变的。因为类可以创建多个对象,不同的对象其const数据成员的值可以不同。所以不能在类声明中初始化const数据成员,因为类的对象未被创建时,编译器不知道const 数据成员的值是什么
------解决方案--------------------
但是这样写依然报错。。。为什么? 求高人指点
const double a=1.11;
const double b=math.sin(a);//错误1 指派给“b”的表达式必须是常量


------解决方案--------------------
常量就表示不能放在函数里面作为一个返回值得到的
编译的时候常量是直接就确定了地址的 你用了一个方法获得常量值那么编译时候没法知道这个常量的值是多少 也就没法给他确定地址
你可能回想编译器应该优化这个编译 因为a是常量所以sin(a)也是常量 但是万一我哪天改变了sin的实现呢?
------解决方案--------------------
简单的说 const变量的值必须在你写代码的时候就确定了。所以你不能把一个变量赋值给它。
------解决方案--------------------
哈哈,因为编译器比较傻。

傻不可怕,可怕的是他又不是特别的傻。所以const int b = a + 1;是可以的。
------解决方案--------------------
估计Math.Sin必须在运行时才能计算出来。
------解决方案--------------------
const 是设计时常量,所以必须在编译时得到准确的值。Over。
想要运行时常量就用static readonly
------解决方案--------------------
Math.Sin 返回值是 double  类型,而 double 类型的计算精度,根据CPU和操作系统的不同而略有不同,所以, Math.Sin(1) 不能算作是常量。
------解决方案--------------------
const这个东西不是肉眼看是常量他就是常量,得编译时他认为常量那就常量;
得咱们的IDE老大说了算
------解决方案--------------------
引用:
const这个东西不是肉眼看是常量他就是常量,得编译时他认为常量那就常量;
得咱们的IDE老大说了算


应该是Compiler
------解决方案--------------------
引用:
引用:

const这个东西不是肉眼看是常量他就是常量,得编译时他认为常量那就常量;
得咱们的IDE老大说了算


应该是Compiler

------解决方案--------------------
问题提的不错,学习学习!
------解决方案--------------------
const 的值必须在编译时期能够确定,math.sin(a)是在运行时才能确定,所以会报错。