相关疑难解决方法(0)

相同内存地址的两个不同值

#include <iostream>
using namespace std;

int main() {
    const int N = 22;
    int * pN = const_cast<int*>(&N);
    *pN = 33;
    cout << N << '\t' << &N << endl;
    cout << *pN << '\t' << pN << endl;
}
Run Code Online (Sandbox Code Playgroud)

产量

22 0x22ff74

33 0x22ff74

为什么同一地址有两个不同的值?

c++

16
推荐指数
3
解决办法
1740
查看次数

为const变量分配相同的值会导致C++中的UB吗?

鉴于以下C++代码:

#include <iostream>

int main()
{
    const int i = 1;
    *const_cast<int*>(&i) = 1; // Not allowed but doesn't do anything?
    std::cout << i << "\n";
}
Run Code Online (Sandbox Code Playgroud)

问题:上面的代码是否调用UB(未定义的行为)?我知道抛弃const并为iUB中的结果赋值,因为我们不允许更改const变量的值.但是,在上面的代码中,我实际上没有更改 - 的值i- 那么,这仍然是UB吗?

c++ const undefined-behavior

0
推荐指数
1
解决办法
77
查看次数

const_cast 会浪费额外的内存吗?

我们先看一下例子。

#include <iostream>
int main()
{
    const int constant = 1;
    const int* const_p = &constant;
    int* modifier = const_cast<int*>(const_p);
    *modifier = 100;
    std::cout << "constant: " << constant << ", *const_p=" << *const_p;
    //Output: constant: 1, *const_p=100
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我不知道它在内存架构上是如何实现的。看来编译器在堆栈中占用了额外的内存空间,以便我们可以跟踪值为constant的“原始” 1,以及堆栈中值为 的新内存位置100。是吗?那么,const_cast确实会消耗额外的内存,这是初学者可能没有想到的吗?

c++ casting

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

标签 统计

c++ ×3

casting ×1

const ×1

undefined-behavior ×1