草庐IT

c++ - 地址分配给整型变量

你怎么能这样给整型变量赋地址,编译器不会报错。我总是认为你只能将整数值赋给整数变量inta=0x28ff1c你可以对一个char变量做同样的事情,编译器不会报错charb=0x28ff1c它将在控制台屏幕上输出charb的垃圾值和inta的随机值cout谁能给我解释一下为什么charb和inta的输出不同。有人可以向我解释为什么char变量和整数变量可以分配地址 最佳答案 0x28ff1c本身不是地址-它只是一个十六进制数。以下是等价的:inta=2686748;//decimalnumberinta=0x28ff1c;//hexa

c++ - 释放后分配给指针

我正在看《编程面试暴露》一书中的以下代码:booldeleteStack(Element**stack){Element*next;while(*stack){next=(*stack)->next;free(*stack);*stack=next;}returntrue;}我对C++或C不太熟悉,所以这可能是个愚蠢的问题,但在释放指针后给它赋值不会导致问题吗? 最佳答案 在您的示例中,*stack是一个指针。释放它指向的内存然后将指针分配给新变量是完全安全的。唯一不安全的是在释放后取消引用*stack。free(*stack);n

c++ - 在 C++ 中将指针分配给数组

我想在下面做这样的事情:intmain(){inta[10];int*d=generateArrayOfSize(10)//Thisgeneratesanarrayofsize10ontheheapa=d;print(a);//Printsthefirst10elementsofarray.}但是上面的代码给出了编译错误(将‘int*’赋值给‘int[10]’的类型不兼容)。我该怎么做才能使上述代码正常工作? 最佳答案 数组是不可赋值和不可复制的,因此您必须手动(在循环中)或使用std::copy复制每个元素。

c++ - std::pair 将 first 和 second 分配给语义命名的变量

有一个非常流行的问题是“std::pairvsstructwithtwofields”。但我有一个关于将first和second值重新分配给语义命名变量的问题。在常规情况下,我们有这样的事情:conststd::pairresult=processSomething();std::cout但是如果我们先将它们分配给引用变量呢:conststd::pairresult=processSomething();constint&numTotal=result.first;constint&numSuccessful=result.second;std::cout这使我们无需编写有关first

c++ - 通过将其分配给 const std::tuple<int, int>& 来延长 std::tuple<int&,int> 的生命周期

我使用的是std::tuple类并发现我会说的是相当意外的行为。考虑代码:#include#includeinti=20;std::tuplef(){returnstd::tuple(i,0);}intmain(){conststd::tuple&t=f();intj=++i;std::cout(t)这似乎编译并打印了20在所有主要编译器上。由于两种类型不同,此标准是否符合标准或未定义的行为?我知道可以通过将临时分配给constT&来延长它的生命周期。,但据我所知std::tuple与std::tuple的类型不同. 最佳答案 这是

c++ - 可以在分配有新位置的指针上调用 delete 吗?

我们可以在分配给placementnew的指针上调用delete吗?如果没有那么为什么?请详细说明。我知道没有展示位置删除。但是我想知道为什么只删除opetator不能删除内存而不关心指针指向的内存是如何分配的?delete做两件事:调用析构函数释放内存而且我认为delete没有理由不能对通过placementnew创建的对象调用这两个操作中的任何一个。知道原因吗? 最佳答案 您只能对使用operatornew创建的指针调用delete。如果您将放置new与由普通operatornew分配的内存位置一起使用,那么您可以安全地对其使用

c++ - 我可以有条件地选择分配给哪个变量吗?

与thisquestion基本相同,但对于C++。最简单的方法是:if(condition){a=f(x);}else{b=f(x);}虽然这满足了我的需求,但一直困扰着我的是我不得不重复输入f(x)两次,更不用说将代码扩展到这么多行而只执行一行。如果我有更多的目标变量可供选择怎么办?switch(conditionvariable){case1:var1=f(x);break;case2:var2=f(x);break;...casey:vary=f(x);break;}这在我看来很不优雅。C++中是否有任何本质上允许我执行以下操作的内容?do-something-that-retu

c++ - 为什么我不能使用速记将标量值分配给类,而是先声明它,然后设置它的值?

我正在为C++编写一个UTF-8库作为练习,因为这是我的第一个真实世界的C++代码。到目前为止,我已经在名为“ustring”的类中实现了连接、字符索引、解析和编码UTF-8。看起来它在工作,但是两种看似相同的声明新ustring的方式表现不同。第一种方式:ustringa;a="test";有效,重载的“=”运算符将字符串解析到类中(它将Unicode字符串存储为动态分配的int指针)。但是,以下内容不起作用:ustringa="test";因为我收到以下错误:test.cpp:4:error:conversionfrom‘constchar[5]’tonon-scalartype‘

c++ - 是否可以将对象分配给 int?

我有一个CCounter类,它包含受互斥锁保护的整数值。我已经定义了几个运算符,例如post/preinc/dec返回一个整数,所以我可以这样做:CCounterc(10);inti=c++;但是我该如何处理像i=c这样的简单赋值呢?我试图定义friendoperator=但它给了我operator=(int&,constCCounter&)'必须是非静态成员函数错误。请指教。谢谢。 最佳答案 您需要定义一个从CCounter转换为int的转换运算符。将此成员添加到您的类(class):operatorint()const{retu

c++ - 分配给 new 的内存是否会自动释放?

我99%确定答案是盲目的否。请验证我的以下代码会产生内存泄漏的命题。Data&getData(){Data*i=newData();return*i;}voidexampleFunc(){Datad1=getData();Datad2;/*d1isnotdeallocatedbecauseitisontheheap,andd2is*becauseitisonthestack.*/}请注意,这是一个过于简化的示例,很明显您实际上不会使用上面的代码...因此无需指出这一点,谢谢。更新1:除此之外,如果我将指针分配给一个引用会怎么样?在这种情况下,我假设数据未被复制...Data&getDa