标签: const

Function.const的目的是什么?

它在ScalaDoc中但没有太多文档.它似乎总是返回第一个参数.

Function.const(1)(2)例如返回1.

它为什么存在,为什么有用?

parameters scala const function library-design

17
推荐指数
2
解决办法
3663
查看次数

是通过union未定义的行为进行const-casting吗?

与C++不同,C没有概念const_cast.也就是说,没有有效的方法将const限定指针转换为非限定指针:

void const * p;
void * q = p;    // not good
Run Code Online (Sandbox Code Playgroud)

首先:这个演员实际上是未定义的行为吗?

无论如何,GCC警告这一点.要制作需要const-cast的"干净"代码(即我可以保证我不会改变内容,但我所拥有的只是一个可变指针),我看到了以下"转换"技巧:

typedef union constcaster_
{
    void * mp;
    void const * cp;
} constcaster;
Run Code Online (Sandbox Code Playgroud)

用法:u.cp = p; q = u.mp;.

通过这种联盟抛弃常量的C语言规则是什么?我对C的了解只是非常不完整,但我听说C对联合访问比C++要宽松得多,所以虽然我对这个结构有一种不好的感觉,但我想从标准中得到一个论证(C99我想,虽然如果在C11中这已经改变了,那么知道它会很好.

c const unions language-lawyer

17
推荐指数
1
解决办法
824
查看次数

静态只读与const - 不同的装配POV?

关于这个问题有很多问题,但没有一个(除了一个,但仍然是一个短的)正在处理以下场景.

来自C#4书:

在此输入图像描述

马克还写道:

如果更改const的值,则需要重建所有客户端

题 :

1)为什么?是static readonlyconst- static

2)实际值保存在哪里

3)如何使一个领域static readonly实际上solve这个问题"落后于现场"?

c# static const readonly

17
推荐指数
3
解决办法
2856
查看次数

字符串常量类应该是静态的吗?

我正在开发一个新项目,我注意到一些代码,我不确定是否属实.我用来证明问题的名称和值是假的.

public class MyConsts //Should it be static?
{
    public const string MyConst1 = "a";
    public const string MyConst2 = "b";
    public const string MyConst3 = "c";
    public const string MyConst4 = "d";
    ....
}
Run Code Online (Sandbox Code Playgroud)

对于我的逻辑,这个类(只包含consts值)应该是静态的,所以没有选项来初始化它,这没有任何意义,我是否正确?

编辑:我正在写代码盲,所以我混淆了字符串和常量的顺序 - 因为它不是我的问题的目标,我已经修复了这个.

c# static const

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

如何将"指针指针类型"转换为const?

使用以下代码

void TestF(const double ** testv){;}
void callTest(){
    double** test;
    TestF(test);
}
Run Code Online (Sandbox Code Playgroud)

我明白了:

'TestF' : cannot convert parameter 1 from 'double **' to 'const double **'
Run Code Online (Sandbox Code Playgroud)

我不明白为什么.为什么test不能默默地投入const double**?我为什么要明确地这样做?我知道

TestF(const_cast<const double**>(test)) 
Run Code Online (Sandbox Code Playgroud)

使我的代码正确,但我觉得这应该是不必要的.

是否有一些关于const的关键概念我不知道了?

c++ const const-cast

17
推荐指数
2
解决办法
2458
查看次数

C++中的全局常量11

在C++中声明和定义全局常量的最佳方法是什么?我最感兴趣的是C++ 11标准,因为它在这方面做了很多修复.

[编辑(澄清)]:在这个问题中,"全局常量"表示在编译时在任何范围内已知的常量变量或函数.必须可以从多个翻译单元访问全局常量.它不一定是constexpr风格不变-可以是这样const std::map<int, std::string> m = { { 1, "U" }, { 5, "V" } };const std::map<int, std::string> * mAddr() { return & m; }.在这个问题中,我没有触及优选的好的范围或常数名称.让我们把这些问题留给另一个问题.[END_EDIT]

我想知道所有不同情况的答案,所以让我们假设这T是以下之一:

typedef    int                     T;  // 1
typedef    long double             T;  // 2
typedef    std::array<char, 1>     T;  // 3
typedef    std::array<long, 1000>  T;  // 4
typedef    std::string             T;  // 5
typedef    QString                 T;  // 6
class      T {
   // unspecified amount of code
};                                     // 7
// …
Run Code Online (Sandbox Code Playgroud)

c++ const constexpr c++11

17
推荐指数
1
解决办法
7252
查看次数

什么是C++中的constexpr?

我对一个constexpr概念感到困惑,因为我读过的constexpr是在编译时进行评估,因此它对于性能优化与正常情况相比非常有用const.

constexpr int i = 0;
constexpr int& ri = i;
Run Code Online (Sandbox Code Playgroud)

上面的代码返回一个错误"从'const int'类型的表达式中无效初始化类型'int&'的引用",为什么?

此外,下一个代码有一个错误:

constexpr int i = 0;
constexpr int* ri = &i;
Run Code Online (Sandbox Code Playgroud)

如果我替换了constexpr关键字const,以上所有都正常工作.

c++ const constexpr

17
推荐指数
3
解决办法
2122
查看次数

将临时绑定到非const引用

合理

我会尽量避免在C++代码分配完全.也就是说,我只使用初始化并const尽可能地声明局部变量(即总是除了循环变量或累加器之外).

现在,我发现了一个不起作用的情况.我认为这是一般模式,但特别是在以下情况下出现:

问题描述

假设我有一个程序将输入文件的内容加载到字符串中.您可以通过提供文件名(tool filename)或使用标准输入流(cat filename | tool)来调用该工具.现在,我如何初始化字符串?

以下不起作用:

bool const use_stdin = argc == 1;
std::string const input = slurp(use_stdin ? static_cast<std::istream&>(std::cin)
                                          : std::ifstream(argv[1]));
Run Code Online (Sandbox Code Playgroud)

为什么这不起作用?因为原型slurp需要看起来如下:

std::string slurp(std::istream&);
Run Code Online (Sandbox Code Playgroud)

也就是说,我的论证是非 - const因此我不能将它绑定到临时的.似乎没有办法使用单独的变量.

丑陋的解决方法

目前,我使用以下解决方案:

std::string input;
if (use_stdin)
    input = slurp(std::cin);
else {
    std::ifstream in(argv[1]);
    input = slurp(in);
}
Run Code Online (Sandbox Code Playgroud)

但这是以错误的方式揉搓我.首先,它是更多的代码(在SLOC中),但它也使用一个if而不是(这里)更逻辑的条件表达式,并且它在声明后使用我想要避免的赋值.

是否有一种避免这种间接初始化方式的好方法?这个问题可能会推广到需要改变临时对象的所有情况.难道流不是设计得不好以应对这种情况(const流没有意义,但是在临时流上工作确实有意义)?

c++ const temporary

16
推荐指数
2
解决办法
1393
查看次数

声明一个长的常量字节数组

我有一个长字节数组,我需要在我的C#代码中声明.我做这样的事情:

public static class Definitions
{
    public const byte[] gLongByteArray = new byte[] { 
        1, 2, 3,
        //and so on
    };
}
Run Code Online (Sandbox Code Playgroud)

但是我得到一个错误,即const数组只能用空值初始化.

如果我改变conststatic它编译,但我的问题是这样的-当我宣布它public static byte[] gLongByteArray不会在每次我的应用程序加载时初始化,对不对?在这种情况下,gLongByteArray变量将简单地指向在已加载到内存中的已编译exe/dll文件中定义的数组.我问的原因是因为这个数组很长,而且我不希望我的程序在每次应用程序启动时浪费CPU周期加载它,或者更糟糕的是,这个类被引用...

c# arrays const

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

'this'参数的类型为const,但函数未标记为const

好的,所以我在C++中有点像菜鸟,在我的第二次任务中,我需要使用公共和私有参数等来制作类.基本上,mutator函数不起作用,因为显然它们不是const类型的?

这是带有类的头文件:

class Customer {

private:
    string PhoneNumber_;
    string Name_;
    string Address_;

public:
    string get_PhoneNumber() const {return PhoneNumber_;} // Accessor
    const void set_PhoneNumber(unsigned x) {PhoneNumber_ = x;} // Mutator

    string get_Name() const {return Name_;}
    const void set_Name(unsigned x) {Name_ = x;}

    string get_Address() const {return Address_;}
    const void set_Address(unsigned x)  {Address_ = x;}
};

// declare the CreateCustomer function prototype with default values
Customer* CreateCustomer(const string& id = BLANK, const string& name = BLANK, const string& address = BLANK);

Customer* …
Run Code Online (Sandbox Code Playgroud)

c++ getter setter const function

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