小编awk*_*ksp的帖子

这个替代'for'循环语法有什么基础吗?

我遇到了一组用于C++ 咆哮的幻灯片.这里和那里有一些有趣的花絮,但是幻灯片8对我来说很突出.其内容大约是:

不断变化的风格

旧的和破坏的:

for (int i = 0; i < n; i++)
Run Code Online (Sandbox Code Playgroud)

新热度:

for (int i(0); i != n; ++i)
Run Code Online (Sandbox Code Playgroud)

我之前从未见过for使用第二种形式的循环,所以声称它是"新热"让我感兴趣.我可以看到它的一些基本原理:

  1. 使用构造函数和复制初始化直接初始化
  2. != 可能比硬件更快 <
  3. ++i不需要编译器保持旧的值i,这是i++可以做的.

我认为这是不成熟的优化,因为现代优化编译器会将两者编译成相同的指令; 如果有的话,后者更糟糕,因为它不是一个"正常" for循环.使用!=而不是<对我来说也是可疑的,因为它使循环在语义上与原始版本不同,并且可能导致一些罕见但有趣的错误.

for循环的"新热度"版本是否受欢迎?这些天是否有任何理由使用该版本(2016+),例如不寻常的循环变量类型?

c++ for-loop

45
推荐指数
4
解决办法
3935
查看次数

在java中,我们可以将超类Object传递给子类引用吗?

在java中,我们可以将超类Object传递给子类引用吗?

我知道这是一个奇怪的问题/几乎不可行,但我想理解这背后的逻辑为什么在java中不允许这样做.

class Employee {
    public void met1(){
        System.out.println("met1");
    }
}


class SalesPerson extends Employee 
{
    @Override
    public void met1(){
    System.out.println("new met1");
    }


    public void met2(){
        System.out.println("met2");
    }

}

public class ReferenceTest {
    public static void main(String[] args) {

        SalesPerson sales = new Employee(); // line 1

        sales.met1();  // line 2

        sales.met2();  // line 3
    }
}
Run Code Online (Sandbox Code Playgroud)

如果Java允许编译第1行会发生什么?问题出在哪里?

欢迎任何输入/链接.

java polymorphism inheritance reference

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

为什么使用 jmp 会阻止 Clang 汇编程序找出 .fill 的绝对表达式?

我正在编写一个简单的玩具引导加载程序(帖子底部的附加信息)。以下nasm代码显示了在我尝试切换到 Clang 之前的某个时刻引导加载程序的样子。当编译 using nasm -f bin -o nasm.out boot.asm,然后运行 ​​using 时qemu-system-i386 nasm.out!会在屏幕上打印出无穷无尽的字符流:

bits 16
global main
main:
    mov ah, 0x0e
    mov al, '!'
    int 0x10
    jmp main
times 510 - ($ - $$) db 0x00
db 0x55
db 0xaa
Run Code Online (Sandbox Code Playgroud)

我很好奇我是否可以使用 Clang 作为我的汇编程序而不是 nasm,所以我尝试将程序翻译成我认为与 GAS 语法等效的内容:

.code16
.global main
main:
    mov $0x0e, %ah
    mov $'!', %al
    int $0x10
    jmp main
.fill 510 - (. - main)
.byte 0x55
.byte 0xaa
Run Code Online (Sandbox Code Playgroud)

但是,当使用编译时/usr/local/opt/llvm/bin/clang --target=i386-elf …

macos x86 assembly clang bootloader

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

我可以在等式中使用一个参数

我必须为学校编写一个程序,使用参数将摄氏温度转换为华氏温度,反之亦然.我有以下问题:

让我们说温度传入arg[1],我可以直接应用对话方程式arg[1]吗?

args[1] * 9 / 5 + 32
Run Code Online (Sandbox Code Playgroud)

我尝试了但是我有一个关于*操作符的错误"操作符*未定义参数类型.我也尝试使用"*".

到目前为止,这是未完成的代码.

请不要给我最终的代码本身,因为我想学习而不是给出答案

public  class Temperature {
    public  static void main(String[] args) {
        int a  = Integer.parseInt(args[0]);
        int b  = Integer.parseInt(args[1]);
        System.out.println("Veuillez specifier c (celsius) ou f (fahrenheit) suivi de la température. Exemple argc arg32");

        if (args[0].equals ("c"))
        {
            /*convertir en fahrenheit*/
            int temperature = args[1] *9 /5 +32;
        } 
        else if (args[0].equals ("f"))
        {
            /*convertir en celsius*/
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

java

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

Emacs Evil <E>模式和组织模式

我最近开始一起使用emacs,Evil和org-mode.有时在组织模式下记笔记时,程序将进入< E >我可以在框架底部的状态栏上看到的模式.启动emacs时,我通常会< N >在状态栏上看到一个.

我在假设

< N > - 适用于普通模式

< I > - 用于插入模式

什么是< E >模式?

如何在不重新启动emacs的情况下返回正常模式?

emacs org-mode evil-mode

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

是否可以从对象的实例中获取指向成员的指针?

当此编译器错误停止构建时,我正在将一些遗留代码移植到 VS 2015:

error C3867: 'OptDlg::GetFullModel': non-standard syntax; use '&' to create a pointer to member
Run Code Online (Sandbox Code Playgroud)

去对应的文件和行,看到这个:

Manager mgr = GetDocument()->GetManager();
OptDlg dlg;
...
mgr->SetFullModel(dlg.GetFullModel);
if ( dlg.GetFullModel )
    mgr->SetSymm(...
Run Code Online (Sandbox Code Playgroud)

GetFullModelSetFullModel是吸气/设定部对用于在两个不同的类的成员变量:

class Manager {
    ...
    bool GetFullModel() { return m_bFullModel; }
    void SetFullModel(bool bFlag) { m_bFullModel = bFlag; }
    ....
};

class OptDlg {
    ...
    void GetFullModel() { return m_bFullModel; }
    void SetFullModel(bool bValue) { m_bFullModel = bValue; if ( bValue ) m_bInside = 0;}
Run Code Online (Sandbox Code Playgroud)

是的,有些 …

c++ visual-studio-6

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

Java抽象使用instanceof从List中收集类

假设我有以下类的层次结构:

public class MainClass {

}

class A extends MainClass {

}

class B extends MainClass {

}

class C extends MainClass {

}
Run Code Online (Sandbox Code Playgroud)

现在假设我有一个List<MainClass> classes看起来像:

 {A, MainClass, A, B, B, MainClass, C, A, C, B, A}
Run Code Online (Sandbox Code Playgroud)

我希望能够通过他们的班级挑选出对象的子列表.例如,我希望能够仅提取此类A列表中的那些类(但不能提取类MainClass).因此,使用isAssignableFrom(A.class)对我不起作用.

我目前的方法如下:

public <T extends MainClass> List<T> getClasses(List<MainClass> classes, Class classToCollect) {
    List<T> subclasses = new ArrayList<T>();

    for (MainClass clazz : classes) {
        if (clazz.getClass().isInstance(classToCollect)) {
            subclasses.add((T)clazz);
        }
    }

    return subclasses;
}
Run Code Online (Sandbox Code Playgroud)

这仍然不起作用并传回一个空列表.什么给这里?

java

2
推荐指数
1
解决办法
80
查看次数

循环直到在java中输入零

如果用户输入数字零,我想从我的代码停止

这是我的代码

public static void main(String[] args) {
    int choose_num =1;
    Functions fun = new Functions();
    while (choose_num != 0) {
        System.out.println("Hello My Friend, Please choose one: \n");
        System.out.println("1 for Calculator \n2 for compairing \n" +
                            "3 for calculate factorial\n" +
                            "0 for exit");
        Scanner in = new Scanner(System.in);
        try {
            choose_num = in.nextInt();
            switch (choose_num) {
            case 1: fun.add_two_number();
                break;
            case 2: fun.compaire();
                break;
            case 3: fun.factorial();
                break;
            default: choose_num = 0;
                break;
            }
        } finally {
            in.close();
        } …
Run Code Online (Sandbox Code Playgroud)

java eclipse

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