标签: order-of-execution

seq 在 Haskell 中实际上做了什么?

我从真实世界的 Haskell 中读到

它的操作如下:当一个seq表达式被求值时,它会强制求值它的第一个参数,然后返回它的第二个参数。它实际上对第一个参数没有任何作用:seq仅作为强制评估该值的一种方式存在。

我在那里强调了then因为对我来说它意味着两件事发生的顺序。

Hackage我读到

seq a b如果a是底部,则的值是底部,否则等于b。换句话说,它将第一个参数评估a为弱头部范式(WHNF)。seq 通常用于通过避免不必要的懒惰来提高性能。

关于求值顺序的注意事项:表达式seq a b不保证a会在 之前求值b。by 给出的唯一保证seq是两者ab将在seq返回值之前进行评估。特别是,这意味着b可以在 之前进行评估a。[…]

此外,如果我# Source从那里点击链接,页面不存在,所以我看不到seq.

这似乎与此答案下的评论一致:

[…]seq不能在普通的 Haskell 中定义

另一方面(或在同一方面,真的),另一条评论写道:

“真实”seq在 GHC.Prim 中定义为seq :: a -> b -> b; …

haskell functional-programming lazy-evaluation order-of-execution weak-head-normal-form

18
推荐指数
2
解决办法
847
查看次数

多维数组访问是否按顺序进行?

采取以下措施:

int a(void) {
    puts("a");
    return 0;
}

int b(void) {
    puts("b");
    return 1;
}

int c(void) {
    puts("c");
    return 2;
}

int d(void) {
    puts("d");
    return 3;
}
Run Code Online (Sandbox Code Playgroud)

以下行为会有可预测的行为吗?

int arr[4][4][4][4];
arr[a()][b()][c()][d()] = 1;
Run Code Online (Sandbox Code Playgroud)

是否保证按这个顺序打印:

int a(void) {
    puts("a");
    return 0;
}

int b(void) {
    puts("b");
    return 1;
}

int c(void) {
    puts("c");
    return 2;
}

int d(void) {
    puts("d");
    return 3;
}
Run Code Online (Sandbox Code Playgroud)

我知道以下结构是无效的:

int i;
i = i++;
Run Code Online (Sandbox Code Playgroud)

这是因为=是一个无序运算符,因此是否首先计算ii++是未定义的。在另一个序列点之前访问和修改单个对象是未定义的行为。

换句话说,以下内容是否有效:

int i …
Run Code Online (Sandbox Code Playgroud)

c arrays multidimensional-array undefined-behavior order-of-execution

18
推荐指数
2
解决办法
2432
查看次数

什么时候java对象在构造期间变为非null?

假设你正在创建一个java对象:

SomeClass someObject = null;
someObject = new SomeClass();
Run Code Online (Sandbox Code Playgroud)

someObject在什么时候变为非null?是在SomeClass()构造函数运行之前还是之后?

为了澄清一点,假设另一个线程是否someObjectSomeClass()构造函数完成一半时检查是否为null ,它是null还是非null?

另外,如果someObject像这样创建会有什么区别:

SomeClass someObject = new SomeClass();
Run Code Online (Sandbox Code Playgroud)

someObject永远是空的吗?

java null constructor order-of-execution

17
推荐指数
2
解决办法
4478
查看次数

Java使用特定格式的级别顺序打印二叉树

好的,我已经阅读了所有其他相关问题,但找不到有助于java的问题.我从破译其他语言的内容中得到了一般性的想法; 但我还没搞清楚.

问题:我想进行排序(我使用递归工作)并将其打印出树的一般形状.

所以说我有这个:

    1 
   / \
  2   3
 /   / \
4   5   6
Run Code Online (Sandbox Code Playgroud)

我的代码打印出这样的级别顺序:

1 2 3 4 5 6
Run Code Online (Sandbox Code Playgroud)

我想像这样打印出来:

1
2 3
4 5 6
Run Code Online (Sandbox Code Playgroud)

在你给我一个关于做我的工作的道德讲话之前......我已经完成了我的AP Comp Sci项目并且当我的老师提到了广度优先搜索的东西时对此感到好奇.

我不知道它是否会有所帮助,但到目前为止我的代码是:

/**
  * Calls the levelOrder helper method and prints out in levelOrder.
  */
 public void levelOrder()
 {
  q = new QueueList();
  treeHeight = height();
  levelOrder(myRoot, q, myLevel);
 }

 /**
  * Helper method that uses recursion to print out the tree in 
  * levelOrder
  */
 private void levelOrder(TreeNode …
Run Code Online (Sandbox Code Playgroud)

java format binary-tree order-of-execution

17
推荐指数
4
解决办法
7万
查看次数

什么时候初始化器暂时销毁?

在回答了一些问题之后,我今天构建了这个实验

struct A { 
  bool &b; 
  A(bool &b):b(b) { } 
  ~A() { std::cout << b; }  
  bool yield() { return true; } 
}; 

bool b = A(b).yield();

int main() { }
Run Code Online (Sandbox Code Playgroud)

bfalsetrue通过动态初始化将其设置为有值之前(由初始化为零).如果临时在b完成初始化之前被销毁,我们将打印false,否则true.

该规范说明临时在完整表达结束时被销毁.这似乎没有与初始化一起订购b.所以我想知道

  • 规范是否允许实现同时打印falsetrue不同的运行?

false用于上述的Clang打印,而GCC打印true.这让我很困惑.我是否错过了定义订单的规范文本?

c++ initialization language-lawyer temporary-objects order-of-execution

17
推荐指数
1
解决办法
597
查看次数

外部样式表是否在HTML之前加载?

如果我的<head></head>HTML页面部分中包含外部样式表,它们是否会在HTML之前加载并立即应用于渲染?让我介绍一下我的具体用例.

外部styles.css文件:

form label {
    display: none;
}
Run Code Online (Sandbox Code Playgroud)

包含表格的页面:

<head>
    <link rel="stylesheet" href="styles.css" type="text/css" />
</head>
<form action="process.php" method="post">
    <label for="name">Name</label>
    <input type="text" id="name" name="name" />
</form>
Run Code Online (Sandbox Code Playgroud)

我可以确信标签在页面加载时是不可见的(由于CSS下载没有闪烁)吗?

否则,我可以内联添加样式属性,但这可能是维护的噩梦.

html css rendering order-of-execution

17
推荐指数
2
解决办法
7179
查看次数

在C++中销毁全局对象和atexit之间的顺序

我想知道可以确定在销毁全局对象和atexitC++ 之间的顺序

我有一个全局对象和注册atexit函数如下:

static MyClass g_class;

void onExit()
{
    // do some destruction
}

int main()
{
    atexit(onExit);

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

我发现onExit()之前MyClass::~MyClass()在Visual Studio 2012和gcc4.7.2中调用过.我确定onExit在全局对象(如g_class)销毁之前总是会调用它吗?

我想知道全局对象寄存器顺序和atexit寄存器顺序使用相同的顺序表.或者全局对象顺序和atexit顺序之间没有关系?

编辑:对不起,我写错了.整理示例代码时我很困惑.onExit()在~MyClass()之前调用.

c++ atexit order-of-execution global-object

16
推荐指数
1
解决办法
3493
查看次数

ActionFilter的Order属性,从最低到最大,反之亦然?

我定义了两个ActionFilters:

[DefaultResources(Order = 2)]
[RenderTemplate(Order = 1)]
Run Code Online (Sandbox Code Playgroud)

令我惊讶的是DefaultResources是在RenderTemplate之前执行的.但根据MSDN文档,它应该反之亦然:

[Filter1(Order = 2)]
[Filter2(Order = 3)]
[Filter3(Order = 1)]
public void Index()
{
    View("Index");
}
Run Code Online (Sandbox Code Playgroud)

在此示例中,操作筛选器将按以下顺序执行:Filter3,Filter1,然后Filter2.

我正在使用.NET 4.并通过方法OnActionExecuted进行比较.我错过了什么吗?

asp.net-mvc action-filter order-of-execution

12
推荐指数
1
解决办法
3903
查看次数

operator new 的执行顺序和构造函数的参数

C++ 规范是否指定了in的顺序operator new和构造函数。 g++ 让顺序为-> -> ,但 clang++ 让它为-> -> 。 差异是由未指定的行为引起的吗?Anew C(A())
A()newC()newA()C()

g++:7.4.0 叮当++:10.0.0

#include <iostream>
#include <cstdlib>

struct A {
    A() {
        std::cout << "call A()\n";
    }
};

struct C {
    C(A) {
        std::cout << "call S()\n";
    }

    void *operator new(size_t s) {
        std::cout << "call new()\n";
        return malloc(s);
    }
};

int main() {
    void *p = new C(A());
}
Run Code Online (Sandbox Code Playgroud)

c++ language-lawyer order-of-execution c++17

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

什么时候对函数参数C ++执行移动操作

举个例子

void f(B b, A&& a) {...}
B g(B b, A a) {...}

int main() {
    B b;
    A a;
    f(g(b, a), std::move(a));
}
Run Code Online (Sandbox Code Playgroud)

我认为这将是有效的代码,因为a std::move()仅仅是a static_cast,从我收集到的所有函数参数首先进行评估(不保证顺序),然​​后再复制/移动(我认为这是函数调用的一部分,而不是参数评估)到函数的上下文。

c++ move-semantics order-of-execution

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