我希望这段代码要么生成一个约束错误,要么打印一个正数。为什么这段代码两者都不做?
with Ada.Text_IO;
use Ada.Text_IO;
procedure Overflow is
procedure P (I : Positive) is
X : Integer := Integer'Last;
begin
X := (X + I) / 2;
Put_Line (Integer'Image (X) & " should be positive");
end;
begin
P(
如果我们有一个函数:
void func(int *restrict a, int *restrict b, int *restrict c) {
*c = *a + *b;
}
原则上,这段代码可能会导致一些错误:
int aa = 1;
func(&aa, &aa, &aa);
因为在func中,*a *b *c将是相同的对象。但是为什么这段代码可以成功编译呢?
为什么这段代码在C++中需要3.87秒?
#include <stdio.h>
#include <time.h>
int main() {
int iterations=999999;
int size=1000;
int i,k;
clock_t tStart = clock();
for (k=0;k<iterations;k++){
for(i=0; i<size; i++){
//ANYTHING (the content is not important)
我需要这样的内联汇编代码:
我在程序集中有一对(所以,它是平衡的)推送/弹出操作。
我在内存中也有一个变量(所以,不是寄存器)作为输入。
就像这样:
__asm__ __volatile__ ("push %%eax\n\t"
// ... some operations that use ECX as a temporary
"mov %0, %%ecx\n\t"
// ... some other operation
"pop %%eax"
: : "m&
我有这个代码;
static int test = 100;
static int Test
{
get
{
return (int)(test * 0.01f);
}
}
输出为:0
但是这段代码返回的结果不同
static int test = 100;
static int Test
{
get
{
var y = (test * 0.01f);
我想乘两个int数,为了防止超过int限制(2147483647),结果被保存在一个long long变量中。所以,我尝试这段代码:
int a, b;
long long result = a * b;
,它不起作用!,如果a=50000和b=50000,那么result=-1794967296。
因此,我必须将类型转换应用于a和b。
int a, b;
long long result = (long long)a * (long long)b;
为什么有必要在这种情况下应用类型铸造?
注意:我不想更改a和b的数据类型,我需要将它们保持为int。
以下是示例代码。
var values = new List<string>() { "Stack", "Over", "Go" };
var funcs = new List<Func<string>>();
foreach(var v in values)
funcs.Add( ()=>v );
foreach(var f in funcs)
Console.WriteLine(f());
当我用visual studio 2010运行这段代码时,我得到的输出是:Go Go Go
这是一本书上的练习。问题是这段代码的输出是什么。
这段代码总是打印"N is undefined",但我不知道为什么。命令"#undef N“在函数f之后。那么,为什么输出总是"N is undefined”呢?
#define N 100
void f(void);
int main(void)
{
f();
#ifdef N
#undef N
#endif
return 0;
}
void f(void)
{
#if defined(N)
printf("N is %d\n&
如果我编译代码
int main()
{
int i;
i = 1;
i = 2;
}
在带有发布和优化的VS中,反汇编看起来像这样:
int main()
{
int i;
i = 1;
i = 2;
}
010D1000 xor eax,eax
010D1002 ret
但如果我写上“易失性”这个词:
int main()
{
01261000 push ecx
volatile int i;
i = 1;
01261001 mov dword ptr [esp],1
我不知道这段代码是如何工作的。根据我的理解,应该定义所有声明的方法。
class Test
{
public:
void foo();
};
int main()
{
Test t;
return 0;
}
在类Test中,方法foo()是声明的,但没有定义,这段代码仍然工作正常。请解释一下为什么会起作用。这样做不是不对,因为只有声明的方法是没有用的,除非它在抽象类或接口中?我的猜测是,方法声明告诉编译器,所以编译器不会抱怨它,直到有人真正尝试使用这个方法,它才能正常工作。如果是这样的话,那又何必容许呢?有什么具体的原因或用途吗?
在准备学期末考试时,我偶然发现了以下问题:给定这段代码:
#include <stdio.h>
int main() {
const char *const ptr1[] = {"to be", "or not to be", "that is the question"};
char *ptr2 = "that is the question";
(&ptr2)[3]="hamlet";
for (int i = 0; i < sizeof(ptr1
如果我们试图运行这段代码:
int d = 10/0;
我们得到一个编译器错误。所以我们不能除以零。
现在考虑下面的代码:
int d = 10;
int o = d / 0;
d可以有任何东西,除以零是不可以的,
我们没有编译器错误。这个变量有任何我们不能除以零的东西。当我们试图将变量除以零时,编译器为什么不给出一个错误?
假设我有一门课:
open class Organism {
open fun saySomething(){
print("Nein")
}
}
以及继承类:
class Person : Organism() {
override fun saySomething() {
println("Saying hello")
}
}
为什么当我运行这段代码时,我仍然得到person实现:
val x = Person()
(x as Organism).saySomething() // Out
我的代码是:
import java.util.*;
public class A {
public static void main(String[] args){
List<String> list = new ArrayList();
list.add("1"); //ok line 1
list.add(1); //error line 2
}
当我运行这段代码时,Java会给我一个错误,我知道为什么,但即使我只使用了第1行,编译器也会警告我。为什么我会收到这个警告?我不明白我的第一个例子和下面的代码有什么不同:
import
我设计了这段代码来尽可能简单地说明我的问题。如果我有这样的通用函数:
func get<T>() -> T? {
// For example purposes I'm hard coding the result.
return 5 as? T
}
if let x = get() as? Int { /* Won't compile: Generic parameter 'T' could not be inferred */ }
if let x = get() as Int? { /* true */ }
if let
为什么这段代码在编译时会出现错误?我对"if constexpr“的了解(也包括)说,不应该编译else块。
if constexpr (true) {
int a = 10;
} else {
int b = 10
}
错误是:
error: expected ‘,’ or ‘;’ before ‘}’ token
使用的编译器:g++版本7.5.0
在编译时,我使用了-std=c++17标志。
P.S.缺失的“;”是有意的,只是为了检查else是否正在编译。