我的代码在c和c++中的行为是不同的。
void *(*funcPtr)() = dlsym(some symbol..) ; // (1) works in c but not c++
int (*funcPtr)();
*(void**)(&funcPtr) = dlsym(some symbol..) ; // (2) works in c++
我不明白为什么第二次铸造工作在c++,而第一次铸造不工作在c++。在c++中,(1)显示的错误消息从void*到void*()的转换是无效的。
在c++中,数组标识符是指针,而在java中,数组的标识符是引用变量(实际上是指针)。
假设有一个数组a和b。在java中怎么会允许这个操作:
a = b; //the reference that 'b' holds will be copied to 'a' so both a and b point to the same array
但在C++中,相同的操作将被视为无效的赋值。
如果a和b都是c++中的指针,为什么b保存的地址不会被复制到a
我有一段代码可以在C中工作,但不能在C++中工作,有没有办法让它在C和C++上都能工作呢?
void foo(void* b)
{
int *c = b;
printf("%d\n",*c);
}
int main ()
{
int a = 1000;
foo(&a);
return 0;
}
输出:
C++:
1 In function 'void foo(void*)':
2 Line 3: error: invalid conversion from 'void*' to 'int*'
3
C++中有些特性是类型安全的,而其他一些特性则不是。
C++类型安全示例:
char c = 'a';
int *p = &c; // this is not allowed (compiler error)
C++缺乏类型安全性的示例:
int *p; // I don't have to initialize p, and so it will have some junk/random value
*p = 12345; // this will probably lead to segmentation fault!
我在几篇文
我认为在下面的代码中,C“自动将17强制转换为int *”,正如最近有人指出的那样(但没有给出原因),这是错误的。
int *ptoi = 17; // I assumed that 17 is being automatically casted to int *
我知道如果我在C++中做同样的事情,我会得到一个错误,说invalid conversion from int to int *。但如果我在C++中执行以下操作,它会工作得很好:
int *ptoi = (int *)17;
这就是为什么我认为在C中,类型转换是隐式的。
有没有人能解释一下,为什么在C++中,我必须强制转换它,但在
我是一个Java爱好者,我正在尝试和C++一起做一个班级的作业。我在声明我创建的一个类型的变量作为另一个类的属性时遇到了问题。这就是我的方法
private:
HeatingUnit heatingUnit;
int tempToMaintain;
public:
BangBangControl(int tempToMaintain, bool isOn, int initialTemp){
heatingUnit= new HeatingUnit(isOn, initialTemp);
this -> tempToMaintai
这个问题听起来可能有点奇怪,但我从来没有完全理解为什么我们需要有两种不同的语法来删除C++中的动态分配内存?
例如,
int *p = new int[10];
delete[] p; // why not just delete p;?
在普通的老C中,您只需使用free函数来释放分配给指针的内存,而不管分配的元素数量如何。当然,C++要复杂一些,因为它允许类类型调用它们的析构函数等等。但是,我认为使用单一语法删除C++中动态分配的内存没有任何障碍。
有什么根本原因决定使用两个版本,delete和delete[]?
更重要的是,如果您使用delete而不是delete[],大多数编译器甚至都
因此,我了解了如何将地址传递给C函数以避免传入值。但我不理解的是在C++中通过引用传入。我的理解不足来自于C,在C中,如果你通过引用传递变量,你只会得到一个基于地址的无意义的int值。例如,如果你这样做了:
int x = 5;
int* p = x;
int y = p;
y将是一个无意义的int值。因此,我无法理解基于上述逻辑的C++通过引用传递。有没有一些编译器标识你正在尝试做的事情,以便它以一种使其与C代码等效的方式进行编译?有关按指针和按引用传递C和C++的信息,请参见下面的内容:
// C pass by pointer value
void main() {
int a