标签: const

C/C++改变了const的值

我有一篇文章,但我失去了它.它展示并描述了一些人们应该小心的C/C++技巧.其中一个让我感兴趣,但现在我正在尝试复制它,我无法将其编译.

这个概念是可以随意改变constC/C++ 中a的值

它是这样的:

const int a = 3;          // I promise I won't change a
const int *ptr_to_a = &a; // I still promise I won't change a
int *ptr;
ptr = ptr_to_a;

(*ptr) = 5;               // I'm a liar; a is now 5
Run Code Online (Sandbox Code Playgroud)

我想向朋友展示这个,但现在我错过了一步.有谁知道它开始编译和工作缺少什么?

ATM我从'const int*'到'int*'的转换无效,但是当我读到我试过的文章时,它运行得很好.

c++ const

19
推荐指数
4
解决办法
6万
查看次数

为什么我应该按值返回一些东西,因为C++具有const引用?

考虑这个功能:

Thing func(){
    return something;
}
Run Code Online (Sandbox Code Playgroud)

每次调用此函数时,都会生成一个副本something并传递给调用者.

我的问题是,为什么不这样做(每次我想按价值归还)?

const Thing& func(){
    return something;
}
Run Code Online (Sandbox Code Playgroud)

这样,我们就没有冒充无法复制的风险something.如果客户端只需要"读取" something而不是"写入"它,那么const引用就可以完全实现.如果客户端确实需要副本,它可以简单地将const引用分配给变量,例如:

Thing thing = func(); // the object is passed by const reference, and then copied.
Run Code Online (Sandbox Code Playgroud)

那么,有没有理由简单地按价值回报?

顺便说一句,并不是因为我非常关心优化,只是因为我没有理由单纯地通过价值来回报.


跟进问题:阅读答案,我知道每种方法都有利弊.有违约吗?例如"默认按值返回"?或者它纯粹基于具体案例?

c++ const reference function

19
推荐指数
3
解决办法
2032
查看次数

无效使用非静态成员函数

我有这样的事情:

class Bar
      {
      public:
        pair<string,string> one;
        std::vector<string> cars;
        Bar(string one, string two, string car);
      };

class Car
      {
      public:
        string rz;
        Bar* owner;
        Car(string car, Bar* p);
      };

class Foo
       {
         public:
          Foo  ( void );
          ~Foo  ( void );
          int Count ( const string & one, const string &  two) const;
          int comparator (const Bar & first, const Bar & second) const;            
            std::vector<Bar> bars;
       };

int Foo::comparator(const Bar & first, const Bar & second) const{
  return first.name < …
Run Code Online (Sandbox Code Playgroud)

c++ const function member non-static

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

可以添加额外的const资格中断功能(假设编译顺利)?

当我尝试将const-correctness应用于我自己的代码时,我经常需要const在其他模块中添加资格(由其他程序员编写)以便在我自己的代码中使用这些函数.(参见补丁修正的正确性)

我一直认为如果一切都编译得很好,这可能会导致功能损坏,因为const标签只在编译时很重要.

然而,有一天,我的一位同事坚持要在我提交添加const标签的代码之前重新运行所有自动化测试,我认为编译这些代码就足够了.

他有意见吗?有没有办法应用const-correctness可能破坏现有的功能?

编辑:重要的是要注意,通常,我只需要为函数的指针参数执行此操作(例如Something getSomething(Object* pObj),Something getSomething(const Object* pObj)我不更改返回类型或方法常量,因为这不是客户端代码的问题.

c++ testing compilation const

19
推荐指数
2
解决办法
778
查看次数

在类型特征中,为什么人们使用枚举而不是静态const作为值?

例如,这就是我写它的方式,它编译并且工作得很好:

template<typename T> struct is_pointer<T*> {
  static const bool value = true;
}
Run Code Online (Sandbox Code Playgroud)

那么为什么有些人写的不太明显

template<typename T> struct is_pointer<T*> {
  enum { value = true };
}      
Run Code Online (Sandbox Code Playgroud)

代替?是不是因为static const变量使用了一个字节的内存,而enum不是?

c++ enums static templates const

19
推荐指数
3
解决办法
2294
查看次数

我们需要什么std :: as_const()?

C++ 11给了我们std::add_const; 使用C++ 17,我们有了一个新的结构 - std::as_const().前者只是const在你提供的类型之前添加了一个.第二个是函数的正确(模板),而不是类型特征,它似乎也是一样 - 除了类型是rvalue-reference时,在这种情况下它不能被使用.

我不太明白提供的动机std::as_const().为什么我们除此之外还需要它std::add_const

c++ const rationale type-traits c++17

19
推荐指数
2
解决办法
1346
查看次数

如何在C++中的派生类的构造函数中初始化基类的const变量?

我有一个没有构造函数的抽象C++类.它应该是一个基类,所以其他类可以继承它.我想要做的是在基类中声明一个常量变量,并在每个派生类的构造函数中初始化它,但在每个类中没有其他地方.它在C++中是否合法?如果是这样,我该怎么做?

c++ inheritance constructor const

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

strchr实现如何工作

我试着编写自己的strchr()方法实现.

它现在看起来像这样:

char *mystrchr(const char *s, int c) {
    while (*s != (char) c) {
        if (!*s++) {
            return NULL;
        }
    }
    return (char *)s;
}
Run Code Online (Sandbox Code Playgroud)

最后一行原来是

return s;
Run Code Online (Sandbox Code Playgroud)

但这不起作用,因为s是const.我发现需要这个演员(char*),但老实说我不知道​​我在那里做什么:(有人可以解释一下吗?

c pointers const strchr

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

getter中的C++ const

我还在学习C++,我到处都在阅读,我必须尽可能地使用const它(出于速度原因,我认为).

我经常写这样的getter方法:

const bool isReady() {
    return ready;
}
Run Code Online (Sandbox Code Playgroud)

但我已经看到一些IDE以这种方式自动生成getter:

bool getReady() const {
    return ready;
}
Run Code Online (Sandbox Code Playgroud)

但是,写代表,如果const在函数之后,我发现这个错误:

member function 'isReady' not viable: 'this' argument has type 'const VideoReader', but function is not marked const
Run Code Online (Sandbox Code Playgroud)

那么,编写const getter的更好方法是什么?我真的要关心吗?

c++ getter const

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

ES6 const会影响垃圾回收吗?

在Kyle Simpson的新标题中,你不了解JS:ES6及更高版本,我找到以下代码片段:

警告将对象或数组指定为常量意味着在该常量的词法范围消失之前,将无法对值进行垃圾回收,因为对该值的引用永远不会被取消.这可能是可取的,但如果不是你的意图,要小心!

(摘录自:Simpson,Kyle."你不了解JS:ES6及其他."O'Reilly Media,Inc.,2015-06-02.iBooks.这些材料可能受版权保护.)

据我所知,他没有对此进行扩展,而且谷歌上的10分钟没有任何结果.这是真的,如果是这样,"对价值的引用永远不会被取消"的含义究竟是什么意思?我养成了宣​​称不会改变的变量的习惯const,这是真正的具体性能/记忆术语中的坏习惯吗?

javascript garbage-collection const ecmascript-6

18
推荐指数
4
解决办法
5541
查看次数