标签: const

const char*和char const* - 它们是一样的吗?

根据我的理解,const修饰符应该从右到左阅读.从那以后,我明白了:

const char*
Run Code Online (Sandbox Code Playgroud)

是一个指针,其char元素不能被修改,但指针本身可以,和

char const*
Run Code Online (Sandbox Code Playgroud)

是一个指向mutable字符的常量指针.

但是我得到以下代码的以下错误:

const char* x = new char[20];
x = new char[30];   //this works, as expected
x[0] = 'a';         //gives an error as expected

char const* y = new char[20];
y = new char[20];   //this works, although the pointer should be const (right?)
y[0] = 'a';         //this doesn't although I expect it to work
Run Code Online (Sandbox Code Playgroud)

那么是哪一个呢?我的理解还是我的编译器(VS 2005)错了?

c++ pointers const

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

C++样式从unsigned char*转换为const char*

我有:

unsigned char *foo();
std::string str;
str.append(static_cast<const char*>(foo()));
Run Code Online (Sandbox Code Playgroud)

错误: invalid static_cast from type ‘unsigned char*’ to type ‘const char*’

在C++风格中投射的正确方法是什么?

c++ casting const

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

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

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

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

c c++ pointers const const-correctness

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

带有花括号的Javascript(ES6)const

我是ECMAScript 6的新手,在尝试学习Ember时,我偶尔会看到以下代码风格:

const {
  abc,
  def
} = Object;
Run Code Online (Sandbox Code Playgroud)

我搜索了谷歌和许多网站,解释了新的ES6规范.我知道这不是当前的实现,因为我输入时我的控制台出错了.

这段代码是什么意思?

UPDATE

我将这个片段粘贴到Babel的转换器中,这就是它返回的内容:

"use strict";

var abc = Object.abc;
var def = Object.def;
Run Code Online (Sandbox Code Playgroud)

我仍然对这是想要实现的目标感到困惑.

javascript const ember.js ecmascript-6

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

为什么要将异常作为引用引用到const?

我已经多次听过和读过,最好将异常作为引用而不是引用来引用.为什么是

try {
    // stuff
} catch (const std::exception& e) {
    // stuff
}
Run Code Online (Sandbox Code Playgroud)

比...更好

try {
    // stuff
} catch (std::exception& e) {
    // stuff
}
Run Code Online (Sandbox Code Playgroud)

c++ const exception

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

`const auto`有什么意义吗?

我认为问题很清楚.将auto关键字自动检测常量性,或总是返回一个非const类型,即使有如.函数的两个版本(一个返回const,另一个不返回).

仅仅为了记录,我确实const auto end = some_container.end()在我的for循环之前使用,但我不知道这是否必要或甚至与正常情况不同auto.

c++ const c++11

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

通过值时,"const"不是多余的吗?

当我遇到计算立方体体积的函数时,我正在阅读我的C++书籍(Deitel).代码如下:

double cube (const double side){
    return side * side * side;
}
Run Code Online (Sandbox Code Playgroud)

使用"const"限定符的解释是这样的:"const限定应该用于强制执行最小特权原则,告诉编译器函数不修改变量端".

我的问题:这里不是使用"const"冗余/不必要的,因为变量是通过值传递的,所以函数无论如何都不能修改它?

c++ const pass-by-value

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

是否对const的rvalue引用有用吗?

我猜不是,但我想证实一下.是否有用const Foo&&,Foo哪种类型?

c++ const rvalue-reference c++11

72
推荐指数
4
解决办法
9033
查看次数

ECMAScript 2015:for循环中的const

以下两个(或两个/两个)代码片段中的哪一个应该在完整的ECMAScript 2015实现中工作:

for (const e of a)

for (const i = 0; i < a.length; i += 1)

根据我的理解,第一个例子应该有效,因为e每次迭代都会初始化.i在第二个版本中是否也应该如此?

我很困惑,因为现有的实现(Babel,IE,Firefox,Chrome,ESLint)似乎并不一致,并且具有const两种循环变体的各种行为的完整实现; 我也无法在标准中找到具体的观点,因此我将非常感激.

javascript scope for-loop const ecmascript-6

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

为什么有时不需要在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
查看次数