标签: order-of-execution

三元操作员既左手术又右手手术......或两者兼而有之

问题是:如果您明白这个问题,请向我解释我没看到的内容.我的问题是:三元如何实际运作?澄清我的问题:左右相关性在这里意味着什么?为什么关联性与评估顺序不一样?这显然就像是if else声明.它不是从右到左评估的.在我看来,从左到右是联想的.

我做了布尔来试图证明这一点.它告诉我它不是正确的联想.(我可能不明白正确的联想意味着什么.)如果它是正确的联想,它会像这样工作,这是给我的答案:

"由于此运算符是右关联的,因此您的代码可以正常工作;"

true ? false ? false ? false ? 3 : 4 : 5 : 6 : 7
evaluated as;

true ? false ? false ? (false ? 3 : 4) : 5 : 6 : 7
which evaluated as;

true ? false ? false ? 4 : 5 : 6 : 7
which evaluated as;

true ? false ? (false ? 4 : 5) : 6 : 7
which evaluated as;

true ? false ? 5 …
Run Code Online (Sandbox Code Playgroud)

c# ternary-operator order-of-execution

5
推荐指数
1
解决办法
332
查看次数

这段 C++ 代码会一直按我的预期工作,还是不能保证执行顺序?

好的,我有一些似乎有效的代码,但我不确定它是否总是有效。我正在使用类的一个成员作为映射键将 unique_ptr 移动到 stl 映射中,但我不确定在某些情况下移动是否会使指针无效。

代码是这样的:

struct a
{
    std::string s;
};
std::map<std::string, std::unique_ptr<a>> m;
std::unique_ptr<a> p = std::make_unique<a>();

// some code that does stuff

m[p->s] = std::move(p);
Run Code Online (Sandbox Code Playgroud)

所以这目前似乎有效,但在我看来,在将字符串用作映射键之前 p 可能变得无效,这将导致内存异常。显然我可以在移动之前创建一个临时字符串,或者我可以通过迭代器进行分配,但如果没有必要,我宁愿不要。

c++ order-of-execution

5
推荐指数
2
解决办法
100
查看次数

Java中的执行顺序

我试图从Thinking in Java中理解这个例子:

package c07;
import com.bruceeckel.simpletest.*;

class Meal {
    Meal() { System.out.println("Meal()"); }
}

class Bread {
    Bread() { System.out.println("Bread()"); }
}

class Cheese {
    Cheese() { System.out.println("Cheese()"); }
}

class Lettuce {
    Lettuce() { System.out.println("Lettuce()"); }
}

class Lunch extends Meal {
    Lunch() { System.out.println("Lunch()"); }
}

class PortableLunch extends Lunch {
    PortableLunch() { System.out.println("PortableLunch()");}
}

public class Sandwich extends PortableLunch {
    private static Test monitor = new Test();
    private Bread b = new …
Run Code Online (Sandbox Code Playgroud)

java order-of-execution

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

Java:尝试执行所有行,还是跳转到catch?

我想知道java try-catch语句的执行路径,但无法找到有关以下情况的详细信息.

如果我有一个如下声明:

try {

  // Make a call that will throw an exception
  thisWillFail();

  // Other calls below:
  willThisExecute();

} catch (Exception exception) {
  // Catch the exception
}
Run Code Online (Sandbox Code Playgroud)

在移动到catch之前,thisWillFail()下面的行是否会执行,或者一旦抛出异常,try语句的执行是否会跳转到catch?

换句话说,假设调用'a'不会在try语句中抛出异常,是否可以安全地假设调用'a'后调用'b'将会执行?

谢谢

java try-catch order-of-execution

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

Qt Quick 孩子的加载顺序有规定吗?

例如,是否保证子项的初始化顺序与它们在源代码中出现的顺序相匹配?

注意:“初始化子项”是指“初始化子项及其所有子项、后代、绑定等”。

qt qml order-of-execution qtquick2

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

为什么此代码打印 1 2 2 而不是预期的 3 3 1?

注意:这是一个自我问答,并且针对“Let us C”一书宣传的错误信息进行了更直观的提问。另外,请让我们不要讨论,这个问题是关于 C 的

我正在阅读 Yashwant Kanetkar 的书“Let us C”。

书中有如下例子:

#include <stdio.h>

int main(void) {
    int a = 1;
    printf("%d %d %d", a, ++a, a++);
}
Run Code Online (Sandbox Code Playgroud)

作者声称这段代码应该输出3 3 1

令人惊讶的是,它输出3 3 1. 这是因为 C 的调用约定是从右到左。也就是说,首先 1通过表达式a++,然后a增加到2。然后结果++a就通过了。即 a 增加到 3 然后通过。最后,传递 a 的最新值,即 3。因此按从右到左的顺序1, 3, 3通过。一旦printf( ) 收集它们,它就会按照我们要求它打印它们的顺序(而不是传递它们的顺序)打印它们。这样3 3 1 就打印出来了。

但是,当我编译代码并使用 运行它时clang,结果是1 2 2 …

c undefined-behavior sequence-points language-lawyer order-of-execution

4
推荐指数
2
解决办法
258
查看次数

不同编译器的执行顺序不同

此代码在 XCode 和 Visual Studio 中提供不同的输出:

#include <iostream>

using namespace std;

int f() {
    cout << 'A';
    return 1;
}

int main() {
    cout << '.' << f();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在 Visual Studio 中它输出

A.1
Run Code Online (Sandbox Code Playgroud)

在 XCode 中它输出

.A1
Run Code Online (Sandbox Code Playgroud)

显然我希望两个编译器输出相同的东西..是否应该不这样做?这是已知的事情还是我可以对此做些什么?

c++ order-of-execution

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

进入循环前显示GlassPane

(在带有Swing GUI的应用程序中)我想在以循环或方法执行的某些工作中显示GlassPane,这是在单击JButton之后调用的。

例如:(单击按钮后执行的操作)

if (item.equals(button)) {

    glassPane.setVisible(true);

    someTimeConsumingMethod();

    glassPane.setVisible(false);

}
Run Code Online (Sandbox Code Playgroud)

运行此代码会导致在someTimeConsumingMethod()执行期间未显示glassPane-GUI仅冻结了片刻,然后显示结果。删除该循环中的最后一行(glassPane.setVisible(false);)会在方法完成后(GUI冻结时)显示glassPane。

有没有简单的方法可以在GUI冻结之前显示glassPane,还是在这里需要使用一些高级知识?(线程?)

UPDATE1:

我已经根据davidXYZ答案更新了我的代码(有两个更改):

(单击按钮后执行的操作)

if (item.equals(button)) {

    glassPane.setVisible(true);

        new Thread(new Runnable(){
            public void run(){
                someTimeConsumingMethod(); // 1st change: running the someTimeConsumingMethod in new Thread
                                           //             instead of setting glassPane to visible
            }
        }).start();

    // 2nd change: moved glassPane.setVisible(false); inside the someTimeConsumingMethod(); (placed at the end of it).

}
Run Code Online (Sandbox Code Playgroud)

第一个更改的要点是,在我的GUI线程中运行someTimeConsumingMethod之前,立即在新线程中设置glassPane可见,这是在someTimeConsumingMethod完成后再次显示了glassPane(对此进行了双重检查)。

现在工作正常,谢谢您的所有回答。我一定会检查您提供的所有链接以真正理解线程!

UPDATE2: 更多信息:someTimeConsumingMethod(); 在我的应用程序中,是根据XML数据预装新的Swing组件(由JButtons和JLabel构建的卡,其中需要的JPanel很少,并将它们添加到正确的位置)。

UPDATE3: 我正在尝试使用SwingWorker的invokeLater方法使其工作。现在看起来像这样:

(单击按钮后执行的操作)

if (item.equals(button)) {

    glassPane.setVisible(true);

    SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() …
Run Code Online (Sandbox Code Playgroud)

java swing glasspane order-of-execution

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

循环遍历字符串时是否保证执行顺序?

以下程序是否保证始终产生相同的输出?

s = 'fgvhlsdagfcisdghfjkfdshfsal'
for c in s:
    print(c)
Run Code Online (Sandbox Code Playgroud)

python for-loop python-3.x order-of-execution

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

r不会对从地址中提取英国邮政编码的正则表达式进行排序

我试图R中从地址字符串中提取英国的邮政编码,使用由英国政府提供的正则表达式在这里.

这是我的功能:

address_to_postcode <- function(addresses) {

  # 1. Convert addresses to upper case
  addresses = toupper(addresses)

  # 2. Regular expression for UK postcodes:
  pcd_regex = "[Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([A-Za-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9]?[A-Za-z])))) {0,1}[0-9][A-Za-z]{2})"

  # 3. Check if a postcode is present in each address or not (return TRUE if present, else FALSE)
  present <- grepl(pcd_regex, addresses)

  # 4. Extract postcodes matching the regular expression for a valid UK postcode
  postcodes <- regmatches(addresses, regexpr(pcd_regex, addresses))

  # 5. Return NA where an address does not …
Run Code Online (Sandbox Code Playgroud)

regex r match postal-code order-of-execution

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