标签: const

如何在Objective-C中命名常量?

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 constants objective-c naming-conventions extern

38
推荐指数
2
解决办法
1万
查看次数

为什么int x [n]错误,其中n是一个const值?

我不明白为什么这样做是错的:

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功能,我认为这与正在发生的事情有关,但我只需要澄清背景中发生的事情.

c arrays const c99

38
推荐指数
3
解决办法
2836
查看次数

在R中声明一个Const变量

我在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编程语言中是不可能的.

statistics r const constants

37
推荐指数
2
解决办法
2万
查看次数

c ++ const成员函数,它返回一个const指针..但返回的指针是什么类型的const?

如果有人问过这个我道歉,但是如何在c ++中创建一个成员函数,它返回以下scenerios中的指针:1.返回的指针是常量,但可以修改里面的垃圾.2.里面的垃圾是常量但可以修改返回的指针.3.垃圾和指针都不能被修改.

是这样的:

  1. int *const func() const
  2. const int* func() const
  3. const 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;

c++ const

37
推荐指数
3
解决办法
5万
查看次数

如何在C#中将类实例声明为常量?

我需要实现这个:

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#似乎不允许函数(构造函数)初始化常量.怎么克服这个?

.net c# const

37
推荐指数
5
解决办法
3万
查看次数

为什么Python中没有'const'?

我来自C背景,正在学习Python.缺乏明确的类型安全性是令人不安的,但我已经习惯了.面对动态语言的所有优点,缺乏内置的基于合同的编程(纯抽象类,接口)是习惯的东西.

然而,无法请求const-cortectness让我发疯!为什么Python中没有常量?为什么不鼓励类级常量

python const const-correctness

37
推荐指数
1
解决办法
2万
查看次数

可以使用const变量来声明C中数组的大小吗?

为什么以下代码会抛出错误?

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 ......).那会发生什么?

c arrays const

37
推荐指数
3
解决办法
3万
查看次数

GCC可以警告我修改C99中const结构的字段吗?

我在尝试制作常量正确的代码时偶然发现了一个小问题.

我本来想写一个函数,它接受一个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)

有可能解决这个问题吗?

c const c99 compiler-warnings

37
推荐指数
4
解决办法
1603
查看次数

Idiomatic way to create an immutable and efficient class in C++

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)

c++ const immutability const-cast

37
推荐指数
4
解决办法
2920
查看次数

声明一个类的const实例

假设我有一个如下定义的类:

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什么?

我意识到那里有三个问题,这是一个糟糕的形式,但我希望有人可以在一个答案中为我解决这个问题.

编辑:如果它是愚蠢的,请随时关闭它...

c++ const

36
推荐指数
2
解决办法
5356
查看次数