Objective-C中常量的命名约定是什么(或者最常用的命名方式)?
extern常量有不同的标准吗?
我见过的一些款式:
NSString* const kPreferenceFirstRun = @"FirstRun";
// Replace "XY" by a prefix representing your company, project or module
NSString* const XYPreferenceFirstRun = @"FirstRun";
Run Code Online (Sandbox Code Playgroud) 我不明白为什么这样做是错的:
const int n = 5;
int x[n] = { 1,1,3,4,5 };
Run Code Online (Sandbox Code Playgroud)
即使n已经是const值.
虽然这样做似乎适合GNU编译器:
const int n = 5;
int x[n]; /*without initialization*/
Run Code Online (Sandbox Code Playgroud)
我知道C99的VLA功能,我认为这与正在发生的事情有关,但我只需要澄清背景中发生的事情.
我在R工作,我想定义一些我(或我的一个合作者)无法改变的变量.在C++中我会这样做:
const std::string path( "/projects/current" );
Run Code Online (Sandbox Code Playgroud)
我如何用R编程语言执行此操作?
为清晰起见编辑:我知道我可以在R中定义这样的字符串:
path = "/projects/current"
Run Code Online (Sandbox Code Playgroud)
我真正想要的是一种语言结构,它保证任何人都不能改变与名为"path"的变量相关的值.
编辑以回复评论:
从技术上来说,const是一个编译时保证,但在我看来,R解释器会抛出一个带有错误消息的停止执行.例如,看看当您尝试将值分配给数字常量时会发生什么:
> 7 = 3
Error in 7 = 3 : invalid (do_set) left-hand side to assignment
Run Code Online (Sandbox Code Playgroud)
所以我真正想要的是一种语言功能,它允许您只分配一次值,当您尝试将新值分配给声明为const的变量时,应该会出现某种错误.我不关心错误是否在运行时发生,特别是如果没有编译阶段.维基百科的定义在技术上可能不是常量,但它非常接近.看起来这在R编程语言中是不可能的.
如果有人问过这个我道歉,但是如何在c ++中创建一个成员函数,它返回以下scenerios中的指针:1.返回的指针是常量,但可以修改里面的垃圾.2.里面的垃圾是常量但可以修改返回的指针.3.垃圾和指针都不能被修改.
是这样的:
int *const func() constconst int* func() constconst int * const func() const我读过的所有教程都没有涵盖这一区别.
旁注:如果我的方法被声明为const,那么教程说我说我不会修改参数..但是在参数是指针的情况下,这对我来说还不够清楚.我的参数需要像:
一个.void func(const int* const x) const;
湾 void func(const int* x) const;
C.void func(const int* const x) const;
我需要实现这个:
static class MyStaticClass
{
public const TimeSpan theTime = new TimeSpan(13, 0, 0);
public static bool IsTooLate(DateTime dt)
{
return dt.TimeOfDay >= theTime;
}
}
Run Code Online (Sandbox Code Playgroud)
theTime是一个常数(严重:-),就像?在我的情况下,从设置中读取它是没有意义的,例如.而且我希望它能够被初始化一次并且永远不会改变.
但是C#似乎不允许函数(构造函数)初始化常量.怎么克服这个?
我来自C背景,正在学习Python.缺乏明确的类型安全性是令人不安的,但我已经习惯了.面对动态语言的所有优点,缺乏内置的基于合同的编程(纯抽象类,接口)是习惯的东西.
然而,无法请求const-cortectness让我发疯!为什么Python中没有常量?为什么不鼓励类级常量?
为什么以下代码会抛出错误?
const int a = 5;
int b[a]={1,2,3,4,5};
Run Code Online (Sandbox Code Playgroud)
而且当我尝试编译没有"const"关键字的上述代码时,我得到了同样的错误:
int a = 5;
int b[a]={1,2,3,4,5};
Run Code Online (Sandbox Code Playgroud)
为什么会这样?我在这里做的错误是什么?
还有另一个问题:什么时候常量被代码中的实际值替换,即如果我声明一个变量说:const int x = 5; 我知道在RAM中没有为变量x分配内存,但是ROM中的常量变量区域保持值5,并且x在代码中出现x的地方简单地替换为值5.但这什么时候发生的?编译时间?启动时间?预处理时间?
PS:我说的是嵌入式C(在微控制器上运行等),而不是在桌面上运行的C. 因此嵌入式系统必然会有一个ROM(Flash,EEPROM ......).那会发生什么?
我在尝试制作常量正确的代码时偶然发现了一个小问题.
我本来想写一个函数,它接受一个const结构的指针,告诉编译器"请告诉我,如果我正在修改结构,因为我真的不想".
我突然想到编译器会允许我这样做:
struct A
{
char *ptrChar;
};
void f(const struct A *ptrA)
{
ptrA->ptrChar[0] = 'A'; // NOT DESIRED!!
}
Run Code Online (Sandbox Code Playgroud)
这是可以理解的,因为实际上const是指针本身,而不是它指向的类型.我想让编译器告诉我,我正在做一些我不想做的事情,但是,如果可能的话.
我使用gcc作为我的编译器.虽然我知道上面的代码应该是合法的,但我仍然检查它是否会发出警告,但没有任何结果.我的命令行是:
gcc -std=c99 -Wall -Wextra -pedantic test.c
Run Code Online (Sandbox Code Playgroud)
有可能解决这个问题吗?
I am looking to do something like this (C#).
public final class ImmutableClass {
public readonly int i;
public readonly OtherImmutableClass o;
public readonly ReadOnlyCollection<OtherImmutableClass> r;
public ImmutableClass(int i, OtherImmutableClass o,
ReadOnlyCollection<OtherImmutableClass> r) : i(i), o(o), r(r) {}
}
Run Code Online (Sandbox Code Playgroud)
The potential solutions and their associated problems I've encountered are:
1. Using const for the class members, but this means the default copy assignment operator is deleted.
Solution 1:
struct OtherImmutableObject {
const int i1;
const int i2;
OtherImmutableObject(int i1, …Run Code Online (Sandbox Code Playgroud) 假设我有一个如下定义的类:
class foo{};
Run Code Online (Sandbox Code Playgroud)
现在,这是完全可以接受的;
foo f;
Run Code Online (Sandbox Code Playgroud)
怎么会出现编译错误?(uninitialized const ‘f’)
const foo f;
Run Code Online (Sandbox Code Playgroud)
我们为什么要这样做?
const foo f = foo();
Run Code Online (Sandbox Code Playgroud)
我知道为什么我们不能这样做..
const foo f(); // though it compiles..
Run Code Online (Sandbox Code Playgroud)
有趣的是,以下内容是有效的:
const std::string f;
Run Code Online (Sandbox Code Playgroud)
那么缺少foo什么?
我意识到那里有三个问题,这是一个糟糕的形式,但我希望有人可以在一个答案中为我解决这个问题.
编辑:如果它是愚蠢的,请随时关闭它...
const ×10
c ×3
c++ ×3
arrays ×2
c99 ×2
constants ×2
.net ×1
c# ×1
const-cast ×1
extern ×1
immutability ×1
objective-c ×1
python ×1
r ×1
statistics ×1