标签: const

返回对象的const引用而不是副本

虽然重构了一些代码,但我遇到了一些返回std :: string的getter方法.像这样的东西例如:

class foo
{
private:
    std::string name_;
public:
    std::string name()
    {
        return name_;
    }
};
Run Code Online (Sandbox Code Playgroud)

当然吸气者会更好地回归const std::string&?当前方法返回的副本效率不高.会返回一个const引用会导致任何问题吗?

c++ const

70
推荐指数
5
解决办法
10万
查看次数

为什么PHP不允许私有const?

我有一个类在其内部实现中使用常量,但我想限制这些常量的可见性.为什么PHP不允许私有常量?有没有另一种方法来实现这一点,或者PHP试图阻止某些类型的设计失误我不知道?

php oop encapsulation const private

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

为什么有时不需要在lambda中捕获const变量?

请考虑以下示例:

#include <cstdlib>

int main() {
    const int m = 42;
    [] { m; }(); // OK

    const int n = std::rand();
    [] { n; }(); // error: 'n' is not captured
}
Run Code Online (Sandbox Code Playgroud)

为什么我需要捕获n第二个lambda而不是m第一个lambda?我在C++ 14标准中检查了第5.1.2节(Lambda表达式)但我无法找到原因.你能指点我解释一个段落吗?

更新:我在GCC 6.3.1和7(主干)中观察到了这种行为.Clang 4.0和5(主干)在两种情况下都失败并出错(variable 'm' cannot be implicitly captured in a lambda with no capture-default specified).

c++ lambda const language-lawyer

70
推荐指数
2
解决办法
4898
查看次数

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

成员函数结束时const的含义是什么?

const当C++ 中的关键字在成员函数的末尾(在参数列表之后)写入时,它到底意味着什么呢?

c++ const

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

如果你已经知道变量应该是常数,为什么要使用关键字const?

我正在阅读的许多书籍const在不应修改变量值时使用关键字.除了向代码的读者指定如果修改此变量可能会导致错误(您可以使用注释来执行此操作),为什么您需要将该关键字作为任何编程语言的一部分?在我看来,如果你不想修改变量,根本就不要.

有人可以为我澄清一下吗?

c c++ const keyword

68
推荐指数
7
解决办法
5657
查看次数

Pedantic gcc warning:在函数返回类型上输入限定符

当我第一次使用GCC 4.3编译我的C++代码时(在成功编译它之后没有4.1,4.0,3.4的-Wall -Wextra选项的警告)我突然遇到了一堆表单错误warning: type qualifiers ignored on function return type.

考虑temp.cpp:

class Something
{
public:
    const int getConstThing() const {
        return _cMyInt;
    }
    const int getNonconstThing() const {
        return _myInt;
    }

    const int& getConstReference() const {
        return _myInt;
    }
    int& getNonconstReference() {
        return _myInt;
    }

    void setInt(const int newValue) {
        _myInt = newValue;
    }

    Something() : _cMyInt( 3 ) {
        _myInt = 2;
    }
private:
    const int _cMyInt;
    int _myInt;
};
Run Code Online (Sandbox Code Playgroud)

跑步g++ temp.cpp …

c++ const gcc-warning

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

如何在构造函数中初始化const字段?

想象一下,我有一个C++类Foo和一个类Bar,它必须用一个构造函数创建,其中传递一个Foo指针,这个指针意味着在Bar实例生命周期中保持不变.这样做的正确方法是什么?

事实上,我认为我可以像下面的代码一样编写,但它不能编译..

class Foo;

class Bar {
public:
    Foo * const foo;
    Bar(Foo* foo) {
        this->foo = foo;
    }
};

class Foo {
public:
  int a;
};
Run Code Online (Sandbox Code Playgroud)

任何建议都是受欢迎的.

c++ constructor const ctor-initializer

66
推荐指数
4
解决办法
7万
查看次数

v8 const,let和var的JavaScript性能影响?

无论功能差异如何,使用新关键字"let"和"const"对"var"的性能有任何广义或特定的影响吗?

运行程序后:

function timeit(f, N, S) {
    var start, timeTaken;
    var stats = {min: 1e50, max: 0, N: 0, sum: 0, sqsum: 0};
    var i;
    for (i = 0; i < S; ++i) {
        start = Date.now();
        f(N);
        timeTaken = Date.now() - start;

        stats.min = Math.min(timeTaken, stats.min);
        stats.max = Math.max(timeTaken, stats.max);
        stats.sum += timeTaken;
        stats.sqsum += timeTaken * timeTaken;
        stats.N++
    }

    var mean = stats.sum / stats.N;
    var sqmean = stats.sqsum / stats.N;

    return {min: stats.min, max: stats.max, mean: mean, …
Run Code Online (Sandbox Code Playgroud)

javascript performance v8 const let

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

C++ 11是否允许vector <const T>?

容器需求已从C++ 03更改为C++ 11.虽然C++ 03有一揽子要求(例如复制构造性和向量的可赋值性),但C++ 11定义了每个容器操作的细粒度要求(第23.2节).

因此,只要您只执行某些不需要赋值的操作(构造并且push_back是这样的操作),您可以例如在向量中存储可复制构造但不可赋值的类型(例如具有const成员的结构).; insert不是).

我想知道的是:这是否意味着标准现在允许vector<const T>?我没有看到任何理由它不应该 - const T就像具有const成员的结构一样,是一种可复制构造但不可分配的类型 - 但我可能错过了一些东西.

(让我觉得我可能错过了一些东西的部分原因是,如果你试图实例化vector<const T>,那gcc trunk会崩溃并烧掉,但是vector<T>对于T有const成员的地方来说很好).

c++ const vector c++11

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