小编T.J*_*.J.的帖子

地址

我试图找到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

c++ pointers this

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

打印背包中的麻袋

假设你是一个小偷,你入侵了一所房子.你在里面找到了以下物品:

一个重3磅的花瓶,价值50美元.
一块重6磅的银块,价值30美元.
一幅重4磅,价值40美元的画作.
重量为5磅,价值10美元的镜子.

这个尺寸为10磅的背包问题的解决方案是90美元.

由动态编程制成的表格是: -

在此输入图像描述

现在我想知道我使用这张表放入麻袋的哪些元素然后如何回溯?

algorithm knapsack-problem dynamic-programming

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

找到数字小数点前的最后两位数(4 + sqrt(11))^ n

我正在做一个问题,我必须在数字
[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)

java precision performance bigdecimal

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

为什么编译器在编译时不知道局部变量的地址?

以下陈述是什么意思?

本地和动态分配的变量具有编译源文件时编译器不知道的地址

我曾经认为局部变量在编译时被分配地址,但是当它超出范围然后在函数调用期间再次进入范围时,该地址可以改变.但是上面的声明说编译器不知道局部变量的添加. 然后如何分配局部变量?为什么在编译时可以知道全局变量的地址?

另外,您能否提供一个很好的链接来阅读如何分配局部变量和其他变量?

提前致谢!

c c++ variables memory-management

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

引用为函数参数?

我的参考资料有问题.考虑以下代码:

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呢?

在我错的地方纠正我.

c++ parameter-passing pass-by-reference

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

这个参考在construstor里面

我正在观看关于Java的Programming Methodology(斯坦福)(CS106A)课程.在第 14讲中,Sahami教授 讲述了Java中用于堆栈和堆上的函数和对象的内存分配.

他告诉对于任何一个对象调用的方法,都会分配一个堆栈并且参数列表和这个引用在stacke上分配空间.通过存储的这个引用,Java能够引用对象的正确实例变量.

stack  - 调用方法时

但是对于构造函数,当构造对象时,此引用与参数列表一起存储.stack  - 调用构造函数时

我的问题是,如果构造函数没有这个引用,那么我们如何在构造函数中使用它为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)

java stack constructor this

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

什么是类型字段

我已经了解到了
type fields is an error-prone technique somewhere

我有谷歌很多,但没有令人满意的结果.虽然我知道typefields个人的意义.我认为类型字段意味着特定类型的字段

class marks;
class test {
marks number;
bool pass;
}
Run Code Online (Sandbox Code Playgroud)

这里根据我的类型字段是数字和通过.如果这是正确的,那么成分与它有何不同?什么是type field技术?怎么会出错?

请给它真正的意义.还举一个例子来说明它的邪恶本质以及它的替代品是什么?

c++

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

返回值总是暂时的吗?

这个页面说了一件奇怪的事:

仅当您的程序没有将返回值复制到对象并且给定示例时,才会创建临时对象

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有关吗?

c++ temporary-objects

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

未定义构造函数的默认值

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++ constructor

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

3种类型的初始化

可能重复:
C++中的以下短语是什么意思:零,默认和值初始化?

今天我开始了解C++中有3种类型的初始化:

  • 零初始化
  • 默认初始化
  • 价值初始化

我搜索了它,但我没有找到满意的结果.我得到的只是一些标准.到目前为止我所理解的是:在值初始化的情况下,数据成员在某些情况下可以获得等于零的值.

请用示例详细说明它们(标准).另外,请不要只提供标准中的文字.

谢谢

c++ initialization value-initialization

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