我试图找到this指针的地址,但这段代码显示一个奇怪的错误:
#include <iostream>
using namespace std;
class Base
{
public:
void test()
{
void *address_of_this =&this;
cout<<address_of_this<<endl;
}
};
int main()
{ Base k;
k.test();
return 0;
} //error non-lvalue in unary'&'
Run Code Online (Sandbox Code Playgroud)
你能解释一下这个错误吗?
还指出什么是非法的地址this?
假设你是一个小偷,你入侵了一所房子.你在里面找到了以下物品:
一个重3磅的花瓶,价值50美元.
一块重6磅的银块,价值30美元.
一幅重4磅,价值40美元的画作.
重量为5磅,价值10美元的镜子.
这个尺寸为10磅的背包问题的解决方案是90美元.
由动态编程制成的表格是: -

现在我想知道我使用这张表放入麻袋的哪些元素然后如何回溯?
我正在做一个问题,我必须在数字
[4 + sqrt(11)] n的小数点前找到最后两位数.
例如,当 n = 4时,[4 + sqrt(11)] 4 = 2865.78190 ......答案是65.其中n可以从2 <= n <= 10 9变化.
我的解决方案 - 我试图构建一个平方根函数,它计算11的sqrt,其精度等于用户输入的n的值.
我BigDecimal在Java中使用过以避免溢出问题.
public class MathGenius {
public static void main(String[] args) {
Scanner reader = new Scanner(System.in);
long a = 0;
try {
a = reader.nextInt();
} catch (Exception e) {
System.out.println("Please enter a integer value");
System.exit(0);
}
// Setting precision for square root 0f 11. str contain string like 0.00001
StringBuffer str …Run Code Online (Sandbox Code Playgroud) 以下陈述是什么意思?
本地和动态分配的变量具有编译源文件时编译器不知道的地址
我曾经认为局部变量在编译时被分配地址,但是当它超出范围然后在函数调用期间再次进入范围时,该地址可以改变.但是上面的声明说编译器不知道局部变量的添加. 然后如何分配局部变量?为什么在编译时可以知道全局变量的地址?
另外,您能否提供一个很好的链接来阅读如何分配局部变量和其他变量?
提前致谢!
我的参考资料有问题.考虑以下代码:
void pseudo_increase(int a){a++;}
int main(){
int a = 0;
//..
pseudo_increase(a);
//..
}
Run Code Online (Sandbox Code Playgroud)
这里,变量的值a不会随着它的克隆或副本的传递而增加,而不是自身变量.
现在让我们考虑另一个例子:
void true_increase(int& a){a++;}
int main(){
int a = 0;
//..
true_increase(a);
//..
}
Run Code Online (Sandbox Code Playgroud)
据说这里的价值a会增加 - 但为什么呢?
当true_increase(a)被调用时,副本a将被传递.这将是一个不同的变量.因此&a将与真实的地址不同a.那么增值的价值如何a呢?
在我错的地方纠正我.
我正在观看关于Java的Programming Methodology(斯坦福)(CS106A)课程.在第 14讲中,Sahami教授 讲述了Java中用于堆栈和堆上的函数和对象的内存分配.
他告诉对于任何一个对象调用的方法,都会分配一个堆栈并且参数列表和这个引用在stacke上分配空间.通过存储的这个引用,Java能够引用对象的正确实例变量.

但是对于构造函数,当构造对象时,此引用与参数列表一起存储.
我的问题是,如果构造函数没有这个引用,那么我们如何在构造函数中使用它为ex
public class foo {
private int i;
public foo(int i)
{this.i = i;// where this reference came from}
}
Run Code Online (Sandbox Code Playgroud) 我已经了解到了
type fields is an error-prone technique somewhere
我有谷歌很多,但没有令人满意的结果.虽然我知道type和fields个人的意义.我认为类型字段意味着特定类型的字段
class marks;
class test {
marks number;
bool pass;
}
Run Code Online (Sandbox Code Playgroud)
这里根据我的类型字段是数字和通过.如果这是正确的,那么成分与它有何不同?什么是type field技术?怎么会出错?
请给它真正的意义.还举一个例子来说明它的邪恶本质以及它的替代品是什么?
这个页面说了一件奇怪的事:
仅当您的程序没有将返回值复制到对象并且给定示例时,才会创建临时对象
UDT Func1(); // Declare a function that returns a user-defined type.
...
Func1(); // Call Func1, but discard return value.
// A temporary object is created to store the return
// value
Run Code Online (Sandbox Code Playgroud)
但如果我做了: -
UDT obj=Fuct1;
Run Code Online (Sandbox Code Playgroud)
在我看来,它也将创建一个临时的如下: -
Func()构造一个本地对象.接下来,在调用者的堆栈上复制构造此本地对象,使其temporary object用作obj的复制构造函数的参数.
我错了吗?
这与copy elision有关吗?
Bjarne写道: -
对于类型T,T()是默认值的表示法,由默认构造函数定义.当我们不声明默认构造函数时会发生什么?例如
using namespace std;
class date{
int n,m;
public:
int day(){return n;}
int month(){return m;}
};//no default constructor
int main()
{
date any =date();
cout<<any.month()<<endl;
cout<<any.day()<<endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
每次运行程序时,该程序的输出为0和0.我没有声明任何默认构造函数然后为什么会退出默认值,即0?
编辑-
class date{
int n,m;
public:
date (){
m=1;}
int day(){return n;}
int month(){return m;}
};
int main()
{
date any =date();
cout<<any.month()<<endl;
cout<<any.day()<<endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在阅读答案后,我提供了一个默认构造函数,但现在n正在获取垃圾值但是根据答案它应该是0,因为m是任何其他构造函数都无法接触的,并且它是值初始化,如答案中所述
今天我开始了解C++中有3种类型的初始化:
我搜索了它,但我没有找到满意的结果.我得到的只是一些标准.到目前为止我所理解的是:在值初始化的情况下,数据成员在某些情况下可以获得等于零的值.
请用示例详细说明它们(标准).另外,请不要只提供标准中的文字.
谢谢
c++ ×7
constructor ×2
java ×2
this ×2
algorithm ×1
bigdecimal ×1
c ×1
performance ×1
pointers ×1
precision ×1
stack ×1
variables ×1