相关疑难解决方法(0)

如何使用const_cast?

我的类中有一个私有变量Student定义为:

const int studentNumnber;
Run Code Online (Sandbox Code Playgroud)

我正在尝试为学生编写一个复制构造函数,我需要抛弃constness来执行此操作,遗憾的是我不明白如何使用std::const_cast.

这是我在我的复制构造函数中尝试做的事情:

    Student(const Student & s) 
        : Person(p.getName(), p.getEmailAddress(), p.getBirthDate()), school(0), studentNumber(0) {
        school = new char[strlen(s.school) + 1];
        strcpy_s(school, strlen(s.school) + 1, s.school);
        const_cast<int*>(this)->studentNumber = s.studentNumber;
        //studentNumber = s.studentNumber);
    }
Run Code Online (Sandbox Code Playgroud)

这不起作用......我不确定这样做的语法是什么.

c++ const-cast

28
推荐指数
1
解决办法
5万
查看次数

我们可以使用`const_cast`来修改常量变量吗?

int main()
{
    const int ia = 10;

    int *pia = const_cast<int*>(&ia);
    *pia = 5;

    std::cout << &ia << "\t" <<  pia <<endl;
    std::cout <<  ia << "\t" << *pia <<endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出是:

0x28fef4       0x28fef4
10             5
Run Code Online (Sandbox Code Playgroud)

*piaia具有相同的地址,但它们具有不同的值.我的目的是用来const_cast修改一个常量值,但结果显示它不起作用.

有谁知道为什么?

c++ volatile const-cast compiler-optimization

7
推荐指数
2
解决办法
1638
查看次数

同一地址的变量如何产生2个不同的值?

考虑一下:

#include <iostream>
using namespace std;

int main(void)
{
    const int a1 = 40;
    const int* b1 = &a1;
    char* c1 = (char *)(b1);
    *c1 = 'A';
    int *t = (int*)c1;


    cout << a1 << " " << *t << endl;
    cout << &a1 << " " << t << endl; 

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这个输出是:

40 65 
0xbfacbe8c 0xbfacbe8c
Run Code Online (Sandbox Code Playgroud)

除非编译器进行优化,否则这对我来说几乎是不可能的.怎么样 ?

c++ casting const undefined-behavior

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

const_cast无法运行c ++?

我有以下代码:

const int k=1;
    int *p=const_cast<int *>( &k);
    cout<<"k before="<<*p<<endl;
    *p=10;
    *const_cast<int *>( &k)=12;
    cout<<"k after="<<k<<endl;
Run Code Online (Sandbox Code Playgroud)

输出是:

k before=1
k after=1
Run Code Online (Sandbox Code Playgroud)

为什么const const不在这里工作?

c++ const-cast

5
推荐指数
1
解决办法
467
查看次数

const ++在C++中的行为

这是我的问题,问题出在评论中

const int a = 5;
const_cast<int&>(a)=7; //throw over const attribute in a,and assign to 7
std::cout<<a<<std::endl; //why still out put 5!!!!!!!!!!
Run Code Online (Sandbox Code Playgroud)

谁可以告诉我为什么,有些书籍会考虑这些问题来推荐?谢谢!

c++ const-cast undefined-behavior

5
推荐指数
1
解决办法
510
查看次数

使用const_cast的奇怪行为

我知道使用const_cast通常是坏主意,但我正在玩它,我遇到了一个奇怪的行为,其中:

两个指针具有相同的地址值,但在取消引用时,给出不同的数据值.

有没有人对此有解释?

#include <iostream>

int main()
{
    const int M = 10;

    int* MPtr = const_cast<int*>(&M);

    (*MPtr)++;

    std::cout << "MPtr = " << MPtr << "   (*MPtr) = " << (*MPtr) << std::endl;
    std::cout << "  &M = " << &M << "         M = " << M << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

产量

MPtr = 0x7fff9b4b6ce0   (*MPtr) = 11
  &M = 0x7fff9b4b6ce0         M = 10
Run Code Online (Sandbox Code Playgroud)

c++ pointers casting

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

C++如何保持const值?

#include <iostream>
using namespace std;
int main() {
    const int a = 10;
    auto *b = const_cast<int *>(&a);
    *b = 20;
    cout << a << " " << *b;
    cout << endl << &a << " " << b;
}
Run Code Online (Sandbox Code Playgroud)

输出如下:

10 20
0x7ffeeb1d396c 0x7ffeeb1d396c
Run Code Online (Sandbox Code Playgroud)

a*b是在同一个地址,为什么他们有不同的价值?

c++ compiler-optimization

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

const转换为全局var和程序崩溃(C++)

int main()
{
    const int maxint=100;//The program will crash if this line is put outside the main
    int &msg=const_cast<int&>(maxint);  
    msg=200;  
    cout<<"max:"<<msg<<endl; 
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果'const int maxint = 100;',该函数将运行正常.定义被放在main函数内但崩溃并弹出一条错误消息,如果放在外面则说"Access Violation".

有人说这是某种"未定义的行为",我想知道确切的答案以及如何安全地使用const转换?

c++ const-cast

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

const_casting问题

我有以下代码:

int main(){
  const int a = 1;
  const int* b(&a);
  int* c = const_cast<int*>(b);
  *c = 29; 
  cout<<*c<<a<<*b;
  return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)

为什么'a'的值不变为29?这是否意味着当const_casting b时,a的常量不会被删除?

c++ const-cast

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

C++ Const_Cast是否会引发新变量?

#include <iostream>

using namespace std;

int main() {
        const int a = 2;
        const int *p = &a;
        int *p2 = const_cast<int*>(p);
        *p2=5;
        char *p3 = (char *)&a;
        cout << "p2 is" << *p2 << endl;
        cout << "p2 address " << p2 << endl;
        cout << "a is " << a << endl;
        cout << "a address " << &a << endl;

        return 0;
}
Run Code Online (Sandbox Code Playgroud)

大家好!

根据输出,*p2和a具有不同的值,*p2是5,a是2.

但是,p2和&a是相同的.我糊涂了...

你能帮我理解一下这种情况吗?

非常感谢你!

c++ const-cast

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