问题是:如果您明白这个问题,请向我解释我没看到的内容.我的问题是:三元如何实际运作?澄清我的问题:左右相关性在这里意味着什么?为什么关联性与评估顺序不一样?这显然就像是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) 好的,我有一些似乎有效的代码,但我不确定它是否总是有效。我正在使用类的一个成员作为映射键将 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 可能变得无效,这将导致内存异常。显然我可以在移动之前创建一个临时字符串,或者我可以通过迭代器进行分配,但如果没有必要,我宁愿不要。
我试图从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 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'将会执行?
谢谢
例如,是否保证子项的初始化顺序与它们在源代码中出现的顺序相匹配?
注意:“初始化子项”是指“初始化子项及其所有子项、后代、绑定等”。
注意:这是一个自我问答,并且针对“Let us C”一书宣传的错误信息进行了更直观的提问。另外,请让我们不要讨论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
此代码在 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)
显然我希望两个编译器输出相同的东西..是否应该不这样做?这是已知的事情还是我可以对此做些什么?
(在带有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) 以下程序是否保证始终产生相同的输出?
s = 'fgvhlsdagfcisdghfjkfdshfsal'
for c in s:
print(c)
Run Code Online (Sandbox Code Playgroud) 我试图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)