相关疑难解决方法(0)

const-correctness是否为编译器提供了更多优化空间?

我知道它提高了可读性并使程序不易出错,但它提高了多少性能?

在旁注中,参考和const指针之间的主要区别是什么?我会假设它们以不同的方式存储在内存中,但是如何呢?

c c++ pointers const const-correctness

76
推荐指数
3
解决办法
7302
查看次数

const在C/C++中提供了哪些优化?(如果有的话)

我知道在可能的情况下,在通过引用或指针传递参数时,应尽可能使用const关键字.如果我指定参数是常量,编译器可以做的任何优化吗?

可能有几种情况:

功能参数:

常量参考:

void foo(const SomeClass& obj)
Run Code Online (Sandbox Code Playgroud)

Constant SomeClass对象:

void foo(const SomeClass* pObj)
Run Code Online (Sandbox Code Playgroud)

并且指向SomeClass的常量指针:

void foo(SomeClass* const pObj)
Run Code Online (Sandbox Code Playgroud)

变量声明:

const int i = 1234
Run Code Online (Sandbox Code Playgroud)

函数声明:

const char* foo()
Run Code Online (Sandbox Code Playgroud)

每个提供什么样的编译器优化(如果有的话)?

c c++ const compiler-optimization

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

我应该使用const作为局部变量来进行更好的代码优化吗?

我经常使用const未修改的局部变量,如下所示:

const float height = person.getHeight();
Run Code Online (Sandbox Code Playgroud)

我认为它可以使编译后的代码更快,允许编译器进行更多优化.或者我错了,编译器可以自己弄清楚局部变量永远不会被修改?

c++ optimization performance const compiler-optimization

33
推荐指数
2
解决办法
9822
查看次数

何时在函数args中使用const和const引用?

在编写一个带有传递给它的args的C++函数时,如果可以保证不改变对象,则应始终使用const,如果指针不会被更改,则应始终使用const指针.

这种做法何时建议?

你什么时候使用const引用,比仅通过指针传递它有什么好处?

那么void MyObject::Somefunc(const std::string& mystring) 如果一个字符串实际上已经是一个不可变对象,那么拥有一个const字符串会有什么意义呢?

c++ arguments const

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

可以在指针中添加'const'来帮助优化吗?

我有一个指针int* p,并在循环中执行一些操作.我不修改内存,只是阅读.如果我添加const到指针(两种情况,const int* pint* const p),它可以帮助编译器优化代码吗?

我知道其他优点const,比如安全或自我记录,我会问这个特例.重新提出问题:可以const给编译器任何有用的(用于优化)信息吗?

c c++ optimization const

15
推荐指数
1
解决办法
1806
查看次数

为什么编译器不优化这个呢?

看看这段代码:

struct Data {
};

struct Init {
    Data *m_data;

    Init() : m_data(new Data) { }
    ~Init() {
        delete m_data;
    }
};

class Object {
    private:
        const int m_initType;
        Data *m_data;
    public:
        Object(const Init &init) : m_initType(0), m_data(init.m_data) { }
        Object(Init &&init) : m_initType(1), m_data(init.m_data) { init.m_data = nullptr; }
        ~Object() {
            if (m_initType==1) {
                delete m_data;
            }
        }
};

void somefunction(const Object &object); // it is intentionally not defined

void callInitA() {
        Init x;
        somefunction(x);
}

void callInitB() { …
Run Code Online (Sandbox Code Playgroud)

c++ gcc clang

12
推荐指数
1
解决办法
483
查看次数

使用标量类型的"const"的好处?(例如"const double"或"const int")

///////////////////////////////////////
class A {
    ...
    const double funA(void)
    {...}
};

A a;
double x = a.funA(); 
// although the intention is to
// enforce the return value to be const and cannot be
// modified, it has little effect in the real world.

class A2 {
    ...
    double funB(void)
    {...}
};

///////////////////////////////////////
class A {
    void setA(const double d)
    { // now you cannot change the value of d, so what?
      // From my point of view, it is NOT …
Run Code Online (Sandbox Code Playgroud)

c++

10
推荐指数
1
解决办法
5253
查看次数

恒定的正确性和<random>

处理(否则)包含C++ 11随机类的随机生成器调用的常量函数的正确方法是什么?您是否应该放弃函数的常量标志,还是将生成器和分布声明为类的可变元素?一个最小的例子(不编译)可能是:

#include <random>

class foo 
{
  std::mt19937 MyGenerator;
  std::normal_distribution<precision_type> gauss;
  double get_rnd() const {return gauss(MyGenerator);}
};
Run Code Online (Sandbox Code Playgroud)

c++ random const mutable c++11

10
推荐指数
2
解决办法
1098
查看次数

const是否有助于优化器?C++

可能重复:
C++中的常量和编译器优化

让神圣的战争开始:我听到了很多关于const在C++中的用处的不同观点.当然它在成员函数声明等中有用.但它作为变量(或更确切地说,常量)的修饰符有用吗?如果剩下的代码保持不变,它确实对优化器有帮助吗?

c++ const

8
推荐指数
3
解决办法
559
查看次数

C - 对于非指针函数的参数,const的用户有哪些优势?

我想知道在调用函数时用户是否有任何优势

A)void func(int i);

或类似的功能

B)void func(const int i);

在func内部,参数i无论如何都将被复制到堆栈(或编译器在其优化中选择的位置),对于调用此函数的用户,A和B之间没有区别.

所以如果一个工具类似于:

A)

void func(int i)
{
    i = another_func(i);
    printf("%d", i);
}
Run Code Online (Sandbox Code Playgroud)

或者使用const

B)

void func(const int i)
{
    int j = another_func(i);
    printf("%d", j);
}
Run Code Online (Sandbox Code Playgroud)

我的问题 :

实施B有什么优势?编译器可以执行任何类型的优化?A和B只是一个简单的例子,这些问题对其他情况有效.

我理解在指针中使用const的优点(例如const void*data),因为我们告诉用户我们不会修改它的内容,但我不理解const的用法,除了警告函数的程序员他不应该修改它,但在我看来,在API头文件中使用const是没用的.

谢谢你的帮助.

c const

7
推荐指数
1
解决办法
2145
查看次数