标签: default-constructor

声明变量,其类型具有删除的默认构造函数,没有值

我想在多个 if-else 分支中初始化一个变量,稍后使用它,基本上是这样的:

Foo foo;

if (someCondition) {
    std::string someString = getTheString();
    // do some stuff
    foo = Foo(someString);
} else {
    int someInt = getTheInt();
    //do some other stuff maybe
    foo = Foo(someInt);
}

// use foo here
Run Code Online (Sandbox Code Playgroud)

不幸的是,在这个例子中,类型Foo有一个删除的默认构造函数,所以上面的代码不能编译。有没有办法以这种方式初始化这样的变量?

编辑:

正如您在我的示例中看到的那样,我使用了不同的构造函数,并且还在 if/else 块中执行了其他操作,因此不幸的是,三元运算符不起作用。
如果没有办法,没有foo指针,我显然可以采取不同的方法,但我很好奇,如果我的方法以某种方式起作用。

c++ default-constructor variable-declaration

-1
推荐指数
1
解决办法
68
查看次数

“val = _val”前导下划线的含义是什么?它有什么深刻的用途或深刻的意义吗?爪哇语

在一道算法题“通过链表实现队列”中,解法显示首先创建 Node 类:

class Node {
    public int val;
    public Node next;
    public Node(int _val) {
        val = _val;
        next = null;
    }
}
Run Code Online (Sandbox Code Playgroud)

请问 的前导下划线是什么意思val = _val

java constructor default-constructor

-1
推荐指数
1
解决办法
413
查看次数

隐式编译器创建的默认构造函数是否可以有多个 null 主体?

隐式编译器创建的默认构造函数是否可以有多个 null 主体?根据IBM的网站,答案是:不。

我有这个项目有点难倒我:

这是声明一个名为 StackWalkerToConsole 的类的实例,没有定义默认构造函数的地方:

void func5()
{
  StackWalkerToConsole sw;
  ...
}
Run Code Online (Sandbox Code Playgroud)

这会以某种方式导致其父类的用户定义构造函数之一被调用:

StackWalker::StackWalker(int options, LPCSTR szSymPath, DWORD dwProcessId, HANDLE hProcess)
{
  // The function has a body, I just removed it for clarity's sake.
  ...
}
Run Code Online (Sandbox Code Playgroud)

因此,我在这个构造函数上放置了一个断点,并使用调用堆栈查看了 StackWalkerToConsole 的默认构造函数。由于源码中没有定义,所以只能看它的反汇编:

StackWalker_VC2017.exe!StackWalkerToConsole::StackWalkerToConsole(void):
0000000140008210  mov         qword ptr [rsp+8],rcx  
0000000140008215  push        rdi  
0000000140008216  sub         rsp,40h  
000000014000821A  call        qword ptr [__imp_GetCurrentProcess (014012E060h)]  
0000000140008220  mov         qword ptr [rsp+30h],rax  
0000000140008225  call        qword ptr [__imp_GetCurrentProcessId (014012E068h)]  
000000014000822B  mov         rcx,qword ptr [rsp+30h]  
0000000140008230 …
Run Code Online (Sandbox Code Playgroud)

c++ x86 winapi constructor default-constructor

-1
推荐指数
1
解决办法
159
查看次数

Java构造函数是否仅在参数化时调用?

显然Java认为我的构造函数代码并不重要,所以当我尝试访问我认为已初始化的ArrayList时,它完全忽略它然后用NullPointerException对我大喊大叫.只有当我向构造函数添加任意参数时,Java才会认为值得关注.

import java.util.ArrayList;

public class DataManager {
    ArrayList<Variable> vars;

    public DataManager() {
        vars = new ArrayList<Variable>();
    }

    public void createVar(String type, String name, String strValue, int numValue) {
        vars.add(new Variable(type, name, strValue, numValue));
    }
}
Run Code Online (Sandbox Code Playgroud)

以及调用此代码的代码:

DataManager data = new DataManager();
data.createVar(...);
Run Code Online (Sandbox Code Playgroud)

变量类:

class Variable {
    String type;
    String name;
    String strValue;
    int numValue;

    public Variable(String type, String name, String strValue, int numValue) {
            this.type = type; this.name = name;
            this.strValue = strValue;
            this.numValue = numValue;
    }
}
Run Code Online (Sandbox Code Playgroud)

运行此结果

线程"main"中的异常java.lang.ArrayIndexOutOfBoundsException:在SudoCode.main(SudoCode.java:6)的SudoCode.go(SudoCode.java:10)的Parser.start(Parser.java:25)处出现1 …

java parameters constructor default-constructor

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

没有自变量构造函数的超类

根据Oracle的文档https://docs.oracle.com/javase/tutorial/java/IandI/super.html,其书面内容是:如果超类没有无参数构造函数,则会出现编译时错误。

但就我而言,我有一个没有任何构造函数的超类。在我的基类中,我正在其无参数构造函数中编写super()。在这里,我在超类中没有no-arg构造函数,但是它没有显示任何错误。

class Person { 

} 
Run Code Online (Sandbox Code Playgroud)
/* subclass Student extending the Person class */
class Student extends Person { 
    Student() { 
        // invoke or call parent class constructor 
        super(); 
        System.out.println("Student class Constructor"); 
    } 
} 
Run Code Online (Sandbox Code Playgroud)
// Driver class 
class Practice {
    public static void main(String[] args) {
        Student s = new Student(); 
    }
}
Run Code Online (Sandbox Code Playgroud)

java inheritance default-constructor

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

用C++编写的vptr和vtable的概念

为什么只有默认构造函数才能创建vptr(虚拟表指针)和vtable(虚拟表)?为什么参数构造函数不能

c++ vtable default-constructor vptr

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

数组默认构造函数

如果我在Java中创建一个只有一个实例变量的整数数组的简单类,那么对于默认构造函数有什么意义呢?我不想把它留空.

java arrays constructor default-constructor

-6
推荐指数
1
解决办法
2346
查看次数