我从真实世界的 Haskell 中读到
它的操作如下:当一个
seq表达式被求值时,它会强制求值它的第一个参数,然后返回它的第二个参数。它实际上对第一个参数没有任何作用:seq仅作为强制评估该值的一种方式存在。
我在那里强调了then因为对我来说它意味着两件事发生的顺序。
从Hackage我读到
seq a b如果a是底部,则的值是底部,否则等于b。换句话说,它将第一个参数评估a为弱头部范式(WHNF)。seq 通常用于通过避免不必要的懒惰来提高性能。关于求值顺序的注意事项:表达式
seq a b不保证a会在 之前求值b。by 给出的唯一保证seq是两者a和b将在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
采取以下措施:
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)
这是因为=是一个无序运算符,因此是否首先计算i或i++是未定义的。在另一个序列点之前访问和修改单个对象是未定义的行为。
换句话说,以下内容是否有效:
int i …Run Code Online (Sandbox Code Playgroud) c arrays multidimensional-array undefined-behavior order-of-execution
假设你正在创建一个java对象:
SomeClass someObject = null;
someObject = new SomeClass();
Run Code Online (Sandbox Code Playgroud)
someObject在什么时候变为非null?是在SomeClass()构造函数运行之前还是之后?
为了澄清一点,假设另一个线程是否someObject在SomeClass()构造函数完成一半时检查是否为null ,它是null还是非null?
另外,如果someObject像这样创建会有什么区别:
SomeClass someObject = new SomeClass();
Run Code Online (Sandbox Code Playgroud)
会someObject永远是空的吗?
好的,我已经阅读了所有其他相关问题,但找不到有助于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) 在回答了一些问题之后,我今天构建了这个实验
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)
bfalse在true通过动态初始化将其设置为有值之前(由初始化为零).如果临时在b完成初始化之前被销毁,我们将打印false,否则true.
该规范说明临时在完整表达结束时被销毁.这似乎没有与初始化一起订购b.所以我想知道
false和true不同的运行?false用于上述的Clang打印,而GCC打印true.这让我很困惑.我是否错过了定义订单的规范文本?
c++ initialization language-lawyer temporary-objects order-of-execution
如果我的<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下载没有闪烁)吗?
否则,我可以内联添加样式属性,但这可能是维护的噩梦.
我想知道可以确定在销毁全局对象和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()之前调用.
我定义了两个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进行比较.我错过了什么吗?
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) 举个例子
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++ ×4
java ×2
arrays ×1
asp.net-mvc ×1
atexit ×1
binary-tree ×1
c ×1
c++17 ×1
constructor ×1
css ×1
format ×1
haskell ×1
html ×1
null ×1
rendering ×1