相关疑难解决方法(0)

T &&(双&符号)在C++ 11中意味着什么?

我一直在研究C++ 11的一些新功能,我注意到的是在声明变量时使用的双符号,例如T&& var.

首先,这只野兽叫什么?我希望谷歌允许我们搜索这样的标点符号.

究竟是什么意思?

乍一看,它似乎是一个双重参考(如C风格的双指针T** var),但我很难想到一个用例.

c++ c++-faq rvalue-reference perfect-forwarding c++11

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

非const引用指向const对象的非const指针

简单来说,我有一个简单的指针:

int* a;
Run Code Online (Sandbox Code Playgroud)

现在,我想改变这个指针的值.我想在一个函数中这样做.函数确保它不会改变指针指向的对象,但会改变指针本身.这就是为什么我希望这个函数接受如下参数:非const引用(因为指针的值将被改变)到指向const对象的非const指针(指针本身可以改变)(函数保证,该对象,指针指向不会被改变).

最简单的功能是:

void function(const int*& a){
    a = 0;
}
Run Code Online (Sandbox Code Playgroud)

但是当我尝试调用此函数时:

int main(){
    int* a;
    function(a);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译器不满意并说:

从'const int*'函数(a)的rvalue初始化'const int*&'类型的非const引用;

我不太明白这个错误,因为对我来说没有涉及rvalue(我传递对象的引用,已经存在于堆栈中.)

问题是,我该怎么做呢?

可以在此处找到示例:https://ideone.com/D45Cid


编辑:

有人建议,我的问题是为什么将"指向非const的指针"转换为"指向const的指针"是不合法的.

我的问题是不同的,因为我没有使用指针指针我只使用指向对象/值的指针并存储对它的引用,因此情况就像在回答这个问题:

const char c = 'c';
char* pc;
const char** pcc = &pc;   // not allowed
*pcc = &c;
*pc = 'C';                // would allow to modify a const object
Run Code Online (Sandbox Code Playgroud)

在我的情况下是不可能的,因为我无法取消引用顶级指针(我没有这样的指针).

此外,我质疑这个问题的完美和干净的解决方案,这个问题没有涉及

c++ pointers reference

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

const指向不符合预期的指针

运行时为什么会出错?我期待ptr_ref无法修改ptr指向的地址,但事情似乎没有按计划进行.

int b = 3;
int* ptr = &b;
//says something about cannot convert int* to type const int*&
const int*& ptr_ref = ptr; 
Run Code Online (Sandbox Code Playgroud)

在此先感谢,15岁的C++ noob

c++ pointers visual-c++

6
推荐指数
1
解决办法
552
查看次数