相关疑难解决方法(0)

可以在其范围之外访问局部变量的内存吗?

我有以下代码.

#include <iostream>

int * foo()
{
    int a = 5;
    return &a;
}

int main()
{
    int* p = foo();
    std::cout << *p;
    *p = 8;
    std::cout << *p;
}
Run Code Online (Sandbox Code Playgroud)

而代码只是运行而没有运行时异常!

输出是 58

怎么会这样?本地变量的内存不能在其功能之外无法访问吗?

c++ memory-management local-variables dangling-pointer

990
推荐指数
19
解决办法
26万
查看次数

右值引用是否允许悬空引用?

考虑以下.

#include <string>
using std::string;

string middle_name () {
    return "Jaan";
}

int main ()
{
    string&& danger = middle_name();   // ?!
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这不会计算任何东西,但它编译时没有错误,并演示了一些让我感到困惑的事情:danger是一个悬空引用,不是吗?

c++ rvalue c++11

31
推荐指数
2
解决办法
3064
查看次数

C++ 11右值引用vs const引用

这可能是显而易见的,但我认为这对我来说很难.鉴于这种:

void test(std::string&&) { }

std::string x{"test"};
test(std::move(x)); // ok
Run Code Online (Sandbox Code Playgroud)

此代码test() 使用rvalue引用作为参数调用,以便程序按照我的预期进行编译.

现在看看这个:

void other_test(const std::string&) { }

std::string x{"test"};
other_test(std::move(x)); // ok???
Run Code Online (Sandbox Code Playgroud)

在这里,我倾斜了.为什么这个版本会编译?所述std::move返回一个&&类型; 为什么我在第二种方法中没有出现错误const&


我知道

int&& s = 5;
const int& s = 5;
Run Code Online (Sandbox Code Playgroud)

是有效的,因为在这两种情况下我提供的东西都没有左值,它没有地址.是&&const&相同呢?如果不是,有区别吗?

c++ c++11

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

const 引用指的是哪里?

有一个简单的程序

#include <stdio.h>

int counter = 3;

const int& f() {
    return counter++;
}

const int& g() {
    return counter++;
}

const int& h(int w) {
    counter = w;
    return counter;
}

void main()
{
    const int& x = f();
    const int& y = g();
    const int& z = g();
    const int& t = h(123);
    counter = 45678;
    printf("%d %d %d %d", x, y, z, t);
}
Run Code Online (Sandbox Code Playgroud)

为什么它的输出是5 5 5 45678?特别是,为什么x和y是5?如果初始化后它们仍然连接到计数器,为什么它们不是 45679 或类似的东西?

c++ const-reference

-1
推荐指数
1
解决办法
87
查看次数