14、P145

发布时间 2023-08-21 15:55:14作者: 多一些不为什么的坚持

1、”不包含底层const,都可以使用 static_cast“目前不理解这句话(整数第四行)

1、指针的类型是int*,double*,float*等

1、int a = 5;

int* b = &a;

这个时候是可以称呼b为指针。

2、把指针放在void*中,其实是指的是把指针放在void这个类型的变量里,加了*,是为说明这是一个指针。

3、这里所说的原来类型指的是double*这个类型。

4、原始的地址值:指的是指针本身的值,指针所指向的数据的地址;

5、指针所指的类型:我理解的应该是int*,double*,float*这种,而不是指针所指向的数据类型int\double\float

6、const_cast 只能改变运算对象的底层const:我理解的是只能修改类似于const char/int/double *pc中的pc这种指针

7、怎么理解“未定义的行为”?

在这段代码中,pc是一个指向常量字符的指针(const char*),而p是一个将pc强制转换为指向字符的指针(char*)的指针。这里的转换是通过const_cast进行的,它允许将常量类型转换为非常量类型。

现在让我们来理解未定义的行为。在C++中,"未定义的行为"是指编程时的一种情况,它违反了C++标准,也就是说,编译器对此没有定义应该采取的具体行为。因此,编译器可以在此类情况下采取任何操作,可能会导致程序出现奇怪的行为、崩溃或其他问题

在这个特定的例子中,p指针被用来指向pc指针,将常量性强制转换为非常量性。但是,pc指针指向的数据是常量,也就是说,它指向的内容不应该被修改。

当你使用p指针去写入数据时,例如:

*p = 'a';

 

这时候,由于p指针实际上指向的是常量数据,而你试图通过它来修改这些数据,这就会导致未定义的行为。

未定义的行为可能导致程序在不同的编译器、平台或输入条件下表现出不同的行为。有时候代码可能会正常运行,而在另一些情况下,它可能会崩溃或产生不可预测的结果。因此,避免未定义的行为是良好的编程实践,以确保程序的稳定性和可靠性。

如果你想要避免未定义的行为,应该避免将指向常量的指针转换为指向非常量的指针,除非你能确保在这种情况下不会尝试修改指向的数据。

8、为什么下面这个是正确?目前还没有总结出一个统一的规律

const char* cp = "Hello";
std::string str = static_cast<std::string>(cp);

 

目前可以先简单的理解为:

这是因为std::string有一个接受const char*的构造函数,所以可以使用static_cast进行转换:

后面还有研究

9、