我遇到了一组用于C++ 咆哮的幻灯片.这里和那里有一些有趣的花絮,但是幻灯片8对我来说很突出.其内容大约是:
不断变化的风格
旧的和破坏的:
Run Code Online (Sandbox Code Playgroud)for (int i = 0; i < n; i++)
新热度:
Run Code Online (Sandbox Code Playgroud)for (int i(0); i != n; ++i)
我之前从未见过for
使用第二种形式的循环,所以声称它是"新热"让我感兴趣.我可以看到它的一些基本原理:
!=
可能比硬件更快 <
++i
不需要编译器保持旧的值i
,这是i++
可以做的.我认为这是不成熟的优化,因为现代优化编译器会将两者编译成相同的指令; 如果有的话,后者更糟糕,因为它不是一个"正常" for
循环.使用!=
而不是<
对我来说也是可疑的,因为它使循环在语义上与原始版本不同,并且可能导致一些罕见但有趣的错误.
for
循环的"新热度"版本是否受欢迎?这些天是否有任何理由使用该版本(2016+),例如不寻常的循环变量类型?
在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行会发生什么?问题出在哪里?
欢迎任何输入/链接.
我正在编写一个简单的玩具引导加载程序(帖子底部的附加信息)。以下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 …
我必须为学校编写一个程序,使用参数将摄氏温度转换为华氏温度,反之亦然.我有以下问题:
让我们说温度传入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) 我最近开始一起使用emacs,Evil和org-mode.有时在组织模式下记笔记时,程序将进入< E >
我可以在框架底部的状态栏上看到的模式.启动emacs时,我通常会< N >
在状态栏上看到一个.
我在假设
< N >
- 适用于普通模式
< I >
- 用于插入模式
什么是< E >
模式?
如何在不重新启动emacs的情况下返回正常模式?
当此编译器错误停止构建时,我正在将一些遗留代码移植到 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)
GetFullModel
和SetFullModel
是吸气/设定部对用于在两个不同的类的成员变量:
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)
是的,有些 …
假设我有以下类的层次结构:
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)
这仍然不起作用并传回一个空列表.什么给这里?
如果用户输入数字零,我想从我的代码停止
这是我的代码
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 ×4
c++ ×2
assembly ×1
bootloader ×1
clang ×1
eclipse ×1
emacs ×1
evil-mode ×1
for-loop ×1
inheritance ×1
macos ×1
org-mode ×1
polymorphism ×1
reference ×1
x86 ×1