Redian新闻
>
.net 2003竟然不支持类中静态变量
avatar
.net 2003竟然不支持类中静态变量# DotNet - 窗口里的风景
y*b
1
类里面定义下面这么一个静态变量竟然无法编译:
static const unsigned int DEFAULT_CAPACITY = 30;
只得借用enum来实现, 可是带来一些其它问题. .net 2003这么新的东西,
怎么会不支持呢? linux下面的g++都支持啊.
avatar
st
2
use readonly?

【在 y**b 的大作中提到】
: 类里面定义下面这么一个静态变量竟然无法编译:
: static const unsigned int DEFAULT_CAPACITY = 30;
: 只得借用enum来实现, 可是带来一些其它问题. .net 2003这么新的东西,
: 怎么会不支持呢? linux下面的g++都支持啊.

avatar
y*b
3
what does it mean?

【在 st 的大作中提到】
: use readonly?
avatar
st
4
The readonly keyword is a modifier that you can use on fields. When a
field declaration includes a readonly modifier, assignments to the
fields introduced by the declaration can only occur as part of the
declaration or in a constructor in the same class.
You can assign a value to a readonly field only in the following
contexts:
When the variable is initialized in the declaration, for example:
public readonly int y = 5;
For an instance field, in the instance constructors of the class that
contain

【在 y**b 的大作中提到】
: what does it mean?
avatar
st
5
btw, C# supports const ah... what's your problme? what's your code?
I use readonly since I init them in contructor.
also:
Note The readonly keyword is different from the const keyword. A const
field can only be initialized at the declaration of the field. A
readonly field can be initialized either at the declaration or in a
constructor. Therefore, readonly fields can have different values
depending on the constructor used. Also, while a const field is a
compile-time constant, the readonly fiel

【在 st 的大作中提到】
: The readonly keyword is a modifier that you can use on fields. When a
: field declaration includes a readonly modifier, assignments to the
: fields introduced by the declaration can only occur as part of the
: declaration or in a constructor in the same class.
: You can assign a value to a readonly field only in the following
: contexts:
: When the variable is initialized in the declaration, for example:
: public readonly int y = 5;
: For an instance field, in the instance constructors of the class that
: contain

avatar
r*y
6
and FYI:
Note The readonly keyword is different from the const keyword. A const field
can only be initialized at the declaration of the field. A readonly field can
be initialized either at the declaration or in a constructor. Therefore,
readonly fields can have different values depending on the constructor used.
Also, while a const field is a compile-time constant, the readonly field can
be used for runtime constants, as in the following example:
public static readonly uint l1 = (uint) DateTim
avatar
st
7
yeah, static is not allowed in a const declaration, but it's allowed
in readonly.

【在 r****y 的大作中提到】
: and FYI:
: Note The readonly keyword is different from the const keyword. A const field
: can only be initialized at the declaration of the field. A readonly field can
: be initialized either at the declaration or in a constructor. Therefore,
: readonly fields can have different values depending on the constructor used.
: Also, while a const field is a compile-time constant, the readonly field can
: be used for runtime constants, as in the following example:
: public static readonly uint l1 = (uint) DateTim

avatar
y*b
8
谢谢, 我用的c++, 没用过c#, c++也有readonly吗? 难道是因为
大家都用一个.net环境? 觉得不会呀.
我把源码放在ftp上面, static和enum两个版本, 你们有兴趣
可以看一下其中static定义部分, 并用.net编译一下.
没空就不麻烦了. 我只是奇怪.net 2003 c++的编译器怎么
会不能识别static const unsigned int DEFAULT_CAPACITY = 30;
ftp:
128.138.45.113:2121
cross/cross

【在 st 的大作中提到】
: yeah, static is not allowed in a const declaration, but it's allowed
: in readonly.

avatar
st
9
MSDN 说得很清楚了,static const不能一起用,static readonly可以。和和。
C++也有这个,我查的vs.net 2003带的msdn,你难道不用msdn么?

【在 y**b 的大作中提到】
: 谢谢, 我用的c++, 没用过c#, c++也有readonly吗? 难道是因为
: 大家都用一个.net环境? 觉得不会呀.
: 我把源码放在ftp上面, static和enum两个版本, 你们有兴趣
: 可以看一下其中static定义部分, 并用.net编译一下.
: 没空就不麻烦了. 我只是奇怪.net 2003 c++的编译器怎么
: 会不能识别static const unsigned int DEFAULT_CAPACITY = 30;
: ftp:
: 128.138.45.113:2121
: cross/cross

avatar
y*b
10
我很少用.net, 也查msdn, 可是用的很不熟.
这么说好奇怪呀, .net怎么不兼容标准c++语法呢.

【在 st 的大作中提到】
: MSDN 说得很清楚了,static const不能一起用,static readonly可以。和和。
: C++也有这个,我查的vs.net 2003带的msdn,你难道不用msdn么?

avatar
st
11
it's not ANSI C++, it's managed C++ bah.

【在 y**b 的大作中提到】
: 我很少用.net, 也查msdn, 可是用的很不熟.
: 这么说好奇怪呀, .net怎么不兼容标准c++语法呢.

avatar
y*b
12
that is also what I am guessing.【 在 st (月光下老虎慢慢吃人) 的大作中提到: 】
avatar
r*y
13
你新建project的时候选择Visual C++ Projects, 然后细选为Win32 project,就不会有
这个麻烦了。
如果不是.NET project,就不要选.NET。

【在 y**b 的大作中提到】
: that is also what I am guessing.【 在 st (月光下老虎慢慢吃人) 的大作中提到: 】
avatar
st
14
emh, C++ project下面好几个sub category呢,不过我现在vs.net 2003只用C#. hehe

【在 r****y 的大作中提到】
: 你新建project的时候选择Visual C++ Projects, 然后细选为Win32 project,就不会有
: 这个麻烦了。
: 如果不是.NET project,就不要选.NET。

avatar
r*y
15
我想问问,managed C++应该是compile成MSIL再运行的吧,和C#生成的MSIL比运行速度
应该差不多吧,那和unmanaged C++compile成的传统exe比,执行的速度差多少?假设
同一硬件平台和操作系统。

【在 st 的大作中提到】
: emh, C++ project下面好几个sub category呢,不过我现在vs.net 2003只用C#. hehe
avatar
st
16
应该快不少呢,具体不好说,看过那个C# leader的interview,说速度上面会慢,
具体多少没有说。

【在 r****y 的大作中提到】
: 我想问问,managed C++应该是compile成MSIL再运行的吧,和C#生成的MSIL比运行速度
: 应该差不多吧,那和unmanaged C++compile成的传统exe比,执行的速度差多少?假设
: 同一硬件平台和操作系统。

avatar
r*y
17
你说managed c++的MSIL比c#的MSIL的执行速度快不少?

【在 st 的大作中提到】
: 应该快不少呢,具体不好说,看过那个C# leader的interview,说速度上面会慢,
: 具体多少没有说。

avatar
st
18
不是啊,.exe C++比MSIL快吧,毕竟CLR overhead不少。不过哪些编译出来的.dll
应该不慢吧。具体我不太清楚。

【在 r****y 的大作中提到】
: 你说managed c++的MSIL比c#的MSIL的执行速度快不少?
avatar
y*b
19
我就是这么选的, 而且还设置成empty project, 步骤如下:
visual c++ projects
->Win32
->Win32 Console Projet
->empty project
应该和.net没发生关系.

【在 r****y 的大作中提到】
: 你新建project的时候选择Visual C++ Projects, 然后细选为Win32 project,就不会有
: 这个麻烦了。
: 如果不是.NET project,就不要选.NET。

avatar
st
20
well, I just created a C++ win32 console application.
test.cpp is like following:
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
static const int test = 0;
return 0;
}
I only added one line:
static const int test = 0;
it compiled just fine...

【在 y**b 的大作中提到】
: 我就是这么选的, 而且还设置成empty project, 步骤如下:
: visual c++ projects
: ->Win32
: ->Win32 Console Projet
: ->empty project
: 应该和.net没发生关系.

avatar
r*y
21
你的代码我看了,首先,你写的是MC,用了namespace。其次,你的这个field
TESTSIZE不属于任何class。
我把它改成polynomial的public static field,再将所有TESTSIZE换成
polynomial::TESTSIZE,再去掉namespace main_savitch_4里对
polynomial::DEFAULT_CAPACITY的重复申明,就编译通过了。

【在 y**b 的大作中提到】
: 我就是这么选的, 而且还设置成empty project, 步骤如下:
: visual c++ projects
: ->Win32
: ->Win32 Console Projet
: ->empty project
: 应该和.net没发生关系.

avatar
r*y
22
他的问题不是那么回事。他的代码是mc,却选成了win32的project。
这怎么可以。

【在 st 的大作中提到】
: well, I just created a C++ win32 console application.
: test.cpp is like following:
: #include "stdafx.h"
: int _tmain(int argc, _TCHAR* argv[])
: {
: static const int test = 0;
: return 0;
: }
: I only added one line:
: static const int test = 0;

avatar
st
23
faint ah faint.

【在 r****y 的大作中提到】
: 你的代码我看了,首先,你写的是MC,用了namespace。其次,你的这个field
: TESTSIZE不属于任何class。
: 我把它改成polynomial的public static field,再将所有TESTSIZE换成
: polynomial::TESTSIZE,再去掉namespace main_savitch_4里对
: polynomial::DEFAULT_CAPACITY的重复申明,就编译通过了。

avatar
st
24
我只是给她demonstrate一下vs.net 2003里面win32 C++可以支持static const.

【在 r****y 的大作中提到】
: 他的问题不是那么回事。他的代码是mc,却选成了win32的project。
: 这怎么可以。

avatar
r*y
25
对呀,应该没问题的。我也没想到她是这么弄的,一看代码我没从椅子上跌下来。
不过我也说错了,肯定这个代码不是她写的。
我只是不明白,这个程序要拿mc写干吗。传统的VC6就足够了。执行还快一些。

【在 st 的大作中提到】
: 我只是给她demonstrate一下vs.net 2003里面win32 C++可以支持static const.
avatar
st
26
我机器上面装了VS6, vs.net 2002, 2003,不过msdn只有2003的了。上次3rd party
API是2003的所以装了2003,这年头,装上为了好玩吧。不过怎么大家基础都没有
就开始做程序呢,怎么也需要有一点吧。和和。

【在 r****y 的大作中提到】
: 对呀,应该没问题的。我也没想到她是这么弄的,一看代码我没从椅子上跌下来。
: 不过我也说错了,肯定这个代码不是她写的。
: 我只是不明白,这个程序要拿mc写干吗。传统的VC6就足够了。执行还快一些。

avatar
y*b
27
抱歉, 我还稀里糊涂的, 代码是老师给的, 我只改动函数.
mc是什么? 土啊.

【在 r****y 的大作中提到】
: 对呀,应该没问题的。我也没想到她是这么弄的,一看代码我没从椅子上跌下来。
: 不过我也说错了,肯定这个代码不是她写的。
: 我只是不明白,这个程序要拿mc写干吗。传统的VC6就足够了。执行还快一些。

avatar
y*b
28
.net我刚装上, 一点都不懂啊, 凭直觉搞的. 见笑见笑.

【在 st 的大作中提到】
: 我机器上面装了VS6, vs.net 2002, 2003,不过msdn只有2003的了。上次3rd party
: API是2003的所以装了2003,这年头,装上为了好玩吧。不过怎么大家基础都没有
: 就开始做程序呢,怎么也需要有一点吧。和和。

avatar
r*y
29
其实她也不是没有一点基础,关键是.NET和以前的VC++那套东西差别太大了。如果对这个
差别不了解就千万别混淆在一起了。
记得我第一次打开VS.NET 2002看一个console 的Hello World,那个惊讶。

【在 st 的大作中提到】
: 我机器上面装了VS6, vs.net 2002, 2003,不过msdn只有2003的了。上次3rd party
: API是2003的所以装了2003,这年头,装上为了好玩吧。不过怎么大家基础都没有
: 就开始做程序呢,怎么也需要有一点吧。和和。

avatar
r*y
30
呵呵,就是我们一直在说的managed c++。

【在 y**b 的大作中提到】
: 抱歉, 我还稀里糊涂的, 代码是老师给的, 我只改动函数.
: mc是什么? 土啊.

avatar
st
31
我倒是不觉的,大概因为先看的C#的东西。所谓MC的东西么,感觉就是个变种过去,
最早一直都是win32 C++,后来写了不少java,所以看到C#感觉是个mixed... hehe

【在 r****y 的大作中提到】
: 其实她也不是没有一点基础,关键是.NET和以前的VC++那套东西差别太大了。如果对这个
: 差别不了解就千万别混淆在一起了。
: 记得我第一次打开VS.NET 2002看一个console 的Hello World,那个惊讶。

avatar
r*y
32
那是。我一直没学java。所以才觉得差别大。

【在 st 的大作中提到】
: 我倒是不觉的,大概因为先看的C#的东西。所谓MC的东西么,感觉就是个变种过去,
: 最早一直都是win32 C++,后来写了不少java,所以看到C#感觉是个mixed... hehe

avatar
st
33
其实我写java也就当C++写了,当时也不觉的差别大,写的时候学了点东西,逐渐
就适应了。不过说回来了,很多advance feature都不是一定要用的。yanb完全
可以不用modifier写她的程序的。一堆public对academic的程序来说一点关系都没有。

【在 r****y 的大作中提到】
: 那是。我一直没学java。所以才觉得差别大。
avatar
r*y
34
她是没办法,要用colorado大学的家伙写的代码。那小子用了MC。

【在 st 的大作中提到】
: 其实我写java也就当C++写了,当时也不觉的差别大,写的时候学了点东西,逐渐
: 就适应了。不过说回来了,很多advance feature都不是一定要用的。yanb完全
: 可以不用modifier写她的程序的。一堆public对academic的程序来说一点关系都没有。

avatar
st
35
那个static const怎么冒出来的?

【在 r****y 的大作中提到】
: 她是没办法,要用colorado大学的家伙写的代码。那小子用了MC。
avatar
r*y
36
我看了一下,那个家伙自己的代码里就有很多问题。和yanb都无关:她是无辜的。

【在 st 的大作中提到】
: 那个static const怎么冒出来的?
avatar
st
37
可怜的yanb妹妹,收到的code不能compile最郁闷了。

【在 r****y 的大作中提到】
: 我看了一下,那个家伙自己的代码里就有很多问题。和yanb都无关:她是无辜的。
avatar
r*y
38
那你还不快出手救人。

【在 st 的大作中提到】
: 可怜的yanb妹妹,收到的code不能compile最郁闷了。
avatar
r*y
39
我觉得很奇怪呀,那小子的文件后缀cxx不是VS生成的呀。
看代码,他学了个MC的样子,却不习惯OO的风格,还有就是一些代码居然注明写于
Oct 29, 1997

【在 st 的大作中提到】
: 可怜的yanb妹妹,收到的code不能compile最郁闷了。
avatar
st
40
份特,it's no fun at all ah.

【在 r****y 的大作中提到】
: 那你还不快出手救人。
avatar
st
41

从别的code改过来的把。 我就没有去那个ftp,你帮她改吧。

【在 r****y 的大作中提到】
: 我觉得很奇怪呀,那小子的文件后缀cxx不是VS生成的呀。
: 看代码,他学了个MC的样子,却不习惯OO的风格,还有就是一些代码居然注明写于
: Oct 29, 1997

avatar
r*y
42
我的改法已经post了。
确实可以肯定是拿着从前的c代码改的。除了一些cout,程序结构连c++都不是。

【在 st 的大作中提到】
:
: 从别的code改过来的把。 我就没有去那个ftp,你帮她改吧。

avatar
y*b
43
先感谢两位高手的耐心帮助.
这两天抽空看了看对.net的介绍, 概念和具体应用上同以前vs6相比
非常大啊. 从传统c++到mc, 风格就是两回事. clr那东西, 背后做
了太多事情, 搞的c++都不像c++了. 用mc还不如干脆学c#吧, 我瞎
想的.
再问一个常识问题: 对我提到的代码, 应该选哪种项目? 有没有办
法选择某种类型的项目而不需要改变原来的代码? 谢了.

【在 r****y 的大作中提到】
: 他的问题不是那么回事。他的代码是mc,却选成了win32的project。
: 这怎么可以。

avatar
st
44

I have similar feeling.. hehe
ask rodney bah, I didnot read your code. sorry

【在 y**b 的大作中提到】
: 先感谢两位高手的耐心帮助.
: 这两天抽空看了看对.net的介绍, 概念和具体应用上同以前vs6相比
: 非常大啊. 从传统c++到mc, 风格就是两回事. clr那东西, 背后做
: 了太多事情, 搞的c++都不像c++了. 用mc还不如干脆学c#吧, 我瞎
: 想的.
: 再问一个常识问题: 对我提到的代码, 应该选哪种项目? 有没有办
: 法选择某种类型的项目而不需要改变原来的代码? 谢了.

avatar
r*y
45
mc的好处,是可以在里头混加unmanaged VC code. 现在FCL并没有完全取代win32 API,
所以用vc++.net还是有用的。比较Flexible。有本The Lost Win32API讲这个。

【在 y**b 的大作中提到】
: 先感谢两位高手的耐心帮助.
: 这两天抽空看了看对.net的介绍, 概念和具体应用上同以前vs6相比
: 非常大啊. 从传统c++到mc, 风格就是两回事. clr那东西, 背后做
: 了太多事情, 搞的c++都不像c++了. 用mc还不如干脆学c#吧, 我瞎
: 想的.
: 再问一个常识问题: 对我提到的代码, 应该选哪种项目? 有没有办
: 法选择某种类型的项目而不需要改变原来的代码? 谢了.

avatar
r*y
46
第二个问题,很奇怪,我选的win32 Console Project,一样可以用namespace这些东西。
你看我的原贴讲怎么改的就可以编译通过了。很简单。改动不难呀。只有两个文件。

【在 y**b 的大作中提到】
: 先感谢两位高手的耐心帮助.
: 这两天抽空看了看对.net的介绍, 概念和具体应用上同以前vs6相比
: 非常大啊. 从传统c++到mc, 风格就是两回事. clr那东西, 背后做
: 了太多事情, 搞的c++都不像c++了. 用mc还不如干脆学c#吧, 我瞎
: 想的.
: 再问一个常识问题: 对我提到的代码, 应该选哪种项目? 有没有办
: 法选择某种类型的项目而不需要改变原来的代码? 谢了.

avatar
y*b
47
按改动当然没问题.

【在 r****y 的大作中提到】
: 第二个问题,很奇怪,我选的win32 Console Project,一样可以用namespace这些东西。
: 你看我的原贴讲怎么改的就可以编译通过了。很简单。改动不难呀。只有两个文件。

avatar
r*y
48
我不知道那个原作者是拿什么编译的,cxx不是vs的default文件格式。你可以问问他。
顺便把这个问题也问了。

【在 y**b 的大作中提到】
: 按改动当然没问题.
avatar
y*b
49
en. 他原来都是在linux下面用g++编译的.
谢谢.

【在 r****y 的大作中提到】
: 我不知道那个原作者是拿什么编译的,cxx不是vs的default文件格式。你可以问问他。
: 顺便把这个问题也问了。

avatar
r*y
50
也不错呀。那你也照做吧。
美国的学生是特喜欢免费的开发环境。他们copyright观念太正规了。我见着的
一个美国under的念CS的孩子,凡是要钱的开发环境都不会用。

【在 y**b 的大作中提到】
: en. 他原来都是在linux下面用g++编译的.
: 谢谢.

avatar
st
51
I have my legal vs.net, $11.49 or something...
but I dont have 2003 at home yet... I think it's using same sn as vs.net2002,
so I dont have to buy it, just copy and upgrade, still legal version?

【在 r****y 的大作中提到】
: 也不错呀。那你也照做吧。
: 美国的学生是特喜欢免费的开发环境。他们copyright观念太正规了。我见着的
: 一个美国under的念CS的孩子,凡是要钱的开发环境都不会用。

avatar
r*y
52
In my local university, for department price, a vs.net pro 2003 is < $40.
I remember from 2002, the vs.net has the function of tree-view blocks of
codes. That's a must to me.

【在 st 的大作中提到】
: I have my legal vs.net, $11.49 or something...
: but I dont have 2003 at home yet... I think it's using same sn as vs.net2002,
: so I dont have to buy it, just copy and upgrade, still legal version?

avatar
st
53
I like the tree-view, but I prefer jbuilder type of tree view, which is
provided like object browse, if the object browser is dockable and more
customizable, it would be perfect.

【在 r****y 的大作中提到】
: In my local university, for department price, a vs.net pro 2003 is < $40.
: I remember from 2002, the vs.net has the function of tree-view blocks of
: codes. That's a must to me.

avatar
st
54
actually w2k source code contains many cxx files.

【在 r****y 的大作中提到】
: 我不知道那个原作者是拿什么编译的,cxx不是vs的default文件格式。你可以问问他。
: 顺便把这个问题也问了。

avatar
r*y
55
Right. Just found that. How. Again that topic: origined from BSD?

【在 st 的大作中提到】
: actually w2k source code contains many cxx files.
avatar
st
56
well, i think some windows tutorial mentions cxx in their files as well,
not sure about it, but in the blurred memory, something like that...
dont know exactly why...

【在 r****y 的大作中提到】
: Right. Just found that. How. Again that topic: origined from BSD?
avatar
y*b
57
unix/linux下面我早就通过, 多余的时间想试试.net,
所以才问出这些问题.
非常奇怪的一个现象是: 有一个成员函数操作一个成员
变量(是个动态数组), 在linux下面运行测试程序没发
现错误. 在.net里面立即发现越界(当然是通过测试程序
发现的, 不是运行时提示数组越界). 两种平台下面用的
是完全相同的代码.
你们估计是什么原因?

【在 r****y 的大作中提到】
: 也不错呀。那你也照做吧。
: 美国的学生是特喜欢免费的开发环境。他们copyright观念太正规了。我见着的
: 一个美国under的念CS的孩子,凡是要钱的开发环境都不会用。

avatar
r*y
58
啊,这还要猜?.NET的安全性能设计就是这样的呀。更加严格的越界检查。Linux下是传
统C++当然没这么严格。

【在 y**b 的大作中提到】
: unix/linux下面我早就通过, 多余的时间想试试.net,
: 所以才问出这些问题.
: 非常奇怪的一个现象是: 有一个成员函数操作一个成员
: 变量(是个动态数组), 在linux下面运行测试程序没发
: 现错误. 在.net里面立即发现越界(当然是通过测试程序
: 发现的, 不是运行时提示数组越界). 两种平台下面用的
: 是完全相同的代码.
: 你们估计是什么原因?

avatar
y*b
59
.net也不是提示越界, 而且计算结果无穷大.
linux下竟然不是这个结果. 我有空再琢磨.

【在 r****y 的大作中提到】
: 啊,这还要猜?.NET的安全性能设计就是这样的呀。更加严格的越界检查。Linux下是传
: 统C++当然没这么严格。

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。