我想在我的班级中声明一个变量,以后不能像这样更改:
obj myobj=new obj()
myobj.CONSTANT_VAR="Changed value" //ERROR!!
Run Code Online (Sandbox Code Playgroud)
...但其值可以像这样访问:
Console.WriteLine(myobj.CONSTANT_VAR)
Run Code Online (Sandbox Code Playgroud)
我尝试了以下方法:
public class obj{
public int a, b;
public const string CONSTANT_VAR;
public obj(int x,int y){
a=x;
b=y;
CONSTANT_VAR=1/(a*((""+a).Length)+3/(b*((""+b).Length)).ToString();
}
public int do(){
return this.a+this.b-(CONSTANT_VAR).Length;
}
}
class DriverClass(){
static void Main(){
obj myObj=new obj(2,3);
myObj.a=34;
myObj.b=35;
myObj.CONSTANT_VAR="changed ur string lol"; //i want it to print error
Console.WriteLine(CONSTANT_VAR); //no error
Console.WriteLine(myObj.add());
}
}
Run Code Online (Sandbox Code Playgroud)
但我收到以下错误消息:
constants must have a value assigned
Run Code Online (Sandbox Code Playgroud)
但我不想事先给它赋值..... 我该怎么办?
我有一个常量,它返回一个异常的文本.在这个常数中,我有一个占位符,我必须使用它.我该如何使用这个占位符?
这是我的代码:
public static class Messages
{
public const string ShipDestroyed = "{0} has been destroyed";
}
Run Code Online (Sandbox Code Playgroud)
我在另一个类中使用此方法中的常量:
protected void ValidateAlive(IStarship ship)
{
if (ship.Health <= 0)
{
throw new ShipException(Messages.ShipDestroyed);
}
}
Run Code Online (Sandbox Code Playgroud)
我想将"ship.Name"属性放入占位符.
在 C 中,以下代码是有效的,但在 C++ 中,它需要您对其进行初始化。
const size_t s;
Run Code Online (Sandbox Code Playgroud)
在 C 中,你必须去掉常量,然后再初始化它,但它不能保证工作。但是,如果他们允许此功能存在,那么他们一定有充分的理由。那么为什么在 C++ 中会发生这种变化呢?
之间有什么区别:
int size = 10000;
Run Code Online (Sandbox Code Playgroud)
和
const int size = 10000;
Run Code Online (Sandbox Code Playgroud)
此代码处理数组,其中size
变量名称将作为 进入数组array[size]
。
我如何在我的代码中使用它:
int main() {
int size = 50000; // here is where I had const before
int * items;
items = new int [size];
//random array for bubbleSort
for (int i = 0; i < size; i++) {
items[i] = rand();
}
clock_t start, end;
assert((start = clock()) != -1);
sort1(items, size); //bubbleSort
end = clock();
cout << "bubbleSort(random): " << (double)(end - …
Run Code Online (Sandbox Code Playgroud) 关注这个问题为什么gcc不允许将const int作为case表达式?,什么促销类型用于switch-case表达式比较基本相同?或者有没有办法在C中使用具有常量索引的常量数组作为开关案例标签?.
从第一个链接,我试图替换:
case FOO: // aka 'const int FOO = 10'
Run Code Online (Sandbox Code Playgroud)
用:
case ((int) "toto"[0]): // can't be anything *but* constant
Run Code Online (Sandbox Code Playgroud)
这使 :
https://ideone.com/n1bmIb - > https://ideone.com/4aOSXR =在C++中工作
https://ideone.com/n1bmIb - > https://ideone.com/RrnO2R = C失败
我不太明白,因为"TOTO"字符串不能是任何东西,但一个常数之一,它甚至不是一个变量,它位于编译器内存的空白.我甚至没有玩C语言的'const'模糊逻辑(它实际上代表"只读,不是常数,你期望什么?"),问题是"数组访问"或"指针引用" "进入一个不用C语言评估的常量表达式,但在C++中做得很好.
我希望使用这个"技巧"来使用HASH_MACRO(str)从密钥标识符生成唯一的case标签值,最终使编译器在发生冲突时引发错误,因为找到了类似的标签值.
好的,好的,我被告知这些限制是为了简化语言工具(preproc,编译器,链接器)而C不是没有LISP,但你可以拥有全功能的LISP解释器/编译器,其大小只相当于C等价物的一小部分,所以这不是借口.
问题是:C11是否有"扩展",只允许这个"toto"东西在GCC,CLANG和...... MSVC中工作?我不想去C++路径(typedef的前向声明不再起作用)和嵌入式东西(因此编译时哈希计算用于时空失真).
是否有一种中间的"C +"语言更加"宽容"和"理解"嵌入更好一点,比如 - 赞美领主 - "作为位域成员的枚举",以及我们不能拥有的其他很好的东西(由于以外的原因)现实标准像沙漠太阳下的蜗牛一样演变?
#provemewrong,#changemymind,#norustplease
这是一个相当简单的问题,但不知何故很难找到一个简单的答案.
在C++中,(编辑)const修改的结构变量和(编辑:)非const结构变量之间的区别是什么,但结构具有所有const成员?:
typedef struct mystruct {
const int x;
} t1;
const t1 s1;
Run Code Online (Sandbox Code Playgroud)
VS
typedef struct {
int x;
} t2;
const t2 s2;
Run Code Online (Sandbox Code Playgroud)
?(如果答案是"与课程相同",那么请为课程解释或链接到解释.)
使用关键字有什么意义const
?例如,在制作游戏时,首先要做的事情之一就是设置游戏的宽度和高度。大多数时候你会使用例如:
const int Width
Run Code Online (Sandbox Code Playgroud)
和
const int height
Run Code Online (Sandbox Code Playgroud)
现在我知道你应该这样做,因为屏幕的宽度和高度在整个游戏过程中不会改变,但这样做有什么意义呢?你可以在不使用 const 的情况下做同样的事情,它会工作得很好。
这只是一个例子。所以我现在感到困惑的是:
const
如果您无论如何都不会更改变量,那么在任何地方使用关键字有什么意义呢?
在常量递增后将输出什么
int main(){
const int i = 5;
i++;
printf("%d",i);
}
Run Code Online (Sandbox Code Playgroud)
代码是用c ++编写的.