相关疑难解决方法(0)

我应该返回const对象吗?

Effective C++第03项中,尽可能使用const.

class Bigint
{
  int _data[MAXLEN];
  //...
public:
  int& operator[](const int index) { return _data[index]; }
  const int operator[](const int index) const { return _data[index]; }
  //...
};
Run Code Online (Sandbox Code Playgroud)

const int operator[]确实有所作为int& operator[].

但是关于:

int foo() { }
Run Code Online (Sandbox Code Playgroud)

const int foo() { }
Run Code Online (Sandbox Code Playgroud)

似乎他们是一样的.

我的问题是,为什么我们用const int operator[](const int index) const而不是int operator[](const int index) const

c++

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

对于非内置类型,使用const值返回函数有什么用例?

最近我读过,从函数返回值来为非内置类型限定返回类型const是有意义的,例如:

const Result operation() {
    //..do something..
    return Result(..);
}
Run Code Online (Sandbox Code Playgroud)

我很难理解这个的好处,一旦对象被返回肯定是调用者的选择来决定返回的对象是否应该是const?

c++ const-correctness

40
推荐指数
4
解决办法
7710
查看次数

从函数返回类型中删除const是否会破坏ABI?

假设我有一个声明函数返回const类型的库:

class Foo { ... };
const Foo makeFoo();
Run Code Online (Sandbox Code Playgroud)

现在我想constmakeFoo()返回类型中删除(请参阅我之前的问题).我可以const从头文件和cpp文件中删除它们,重建库,并将我的代码链接到新库.但是,我还有动态链接到此库的旧代码,我希望它继续使用新版本的库.

那么,第一个问题,是否const从返回类型中删除了ABI?

第二个问题,实际代码是完全不同的:它是一个具有静态成员函数的模板类,稍后将显式实例化:

// fooMaker.h
template<class Foo>
class FooMaker {
public:
    static const Foo make();
};

// fooMaker.cpp
template<class Foo>
const Foo FooMaker<Foo>::make() { ... }

template class FooMaker<Foo1>;
template class FooMaker<Foo2>;
Run Code Online (Sandbox Code Playgroud)

它改变了什么吗?

如果这很重要,我在linux下使用g ++.

c++ const abi

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

标签 统计

c++ ×3

abi ×1

const ×1

const-correctness ×1