我想知道为什么返回const reference本地对象是非法的,而返回a local object是合法的,只要你将它分配给const reference?
vector<int> f_legal() {
vector<int> tempVec;
tempVec.push_back(1);
return tempVec;
}
const vector<int>& f_illegal() {
vector<int> tempVec;
tempVec.push_back(1);
return tempVec;
}
void g() {
const vector<int>& v1 = f_legal(); // legal
const vector<int>& v2 = f_illegal(); // illegal
}
Run Code Online (Sandbox Code Playgroud)
编辑:我的观点是,如果将const ref赋给返回的局部变量是合法的,那么不应该将const ref分配给局部变量的返回const ref也是合法的吗?
我有一个包含工作线程的对象.我想在对象超出范围时杀死线程.
using System.IO;
using System;
using System.Threading;
namespace tt {
class Program
{
static void Main()
{
AnotherClass a = new AnotherClass();
a.Say();
}
}
class AnotherClass:IDisposable {
private bool m_Disposed;
private readonly AutoResetEvent m_ResetEvent = new AutoResetEvent(false);
public AnotherClass() {
Thread t = new Thread(wait);
t.Start();
}
public void Dispose() {
Dispose(true);
}
private void Dispose(bool disposing) {
if (m_Disposed) {
return;
}
if (disposing) {
Console.WriteLine("inner disposing");
}
m_ResetEvent.Set();
Console.WriteLine("Outer disposing");
m_Disposed = true;
}
private void wait() …Run Code Online (Sandbox Code Playgroud) 我有一个简单的微调器,我想改变微调器弹出窗口的背景颜色.但是,当我尝试使用xml中的" android:popupBackground "或代码中的setPopupBackgroundResource()设置它时,我得到了一个奇怪的旋转器,如下图所示

如果我没有设置弹出背景颜色或使用预材料设计主题,一切都很好.有谁知道什么是错的?
布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/holo_blue_dark"
android:gravity="top|center"
android:orientation="vertical" >
<Spinner
android:id="@+id/spinner_toolbar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
<!-- ======= ERROR HERE =========== -->
android:popupBackground="#FFFFFF"
android:spinnerMode="dropdown" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
活动
public class TestClass extends Activity {
@Override
public void onCreate(Bundle b) {
super.onCreate(b);
setContentView(R.layout.test_layout);
// spinner
Spinner spinner = (Spinner) (findViewById(R.id.spinner_toolbar));
// create adapter
if (spinner != null) {
ArrayAdapter<CharSequence> listAdapter =
ArrayAdapter.createFromResource(this,
R.array.app_selection_category,
android.R.layout.simple_spinner_item);
listAdapter.setDropDownViewResource(
android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(listAdapter);
}
}
}
Run Code Online (Sandbox Code Playgroud)
样式
<style …Run Code Online (Sandbox Code Playgroud) 根据文档,我有一个简单的DialogFragment,它在退出时调用dismiss:
公共无效dismiss()
关闭片段及其对话框。如果将片段添加到 后堆栈,则将 弹出直至该条目的所有后堆栈状态。否则,将提交一个新事务以删除该片段。
但是,我发现在调用dismiss()之后,该片段仍在后台,因此我必须单击“后退”按钮将其清除。有人知道为什么吗?
这是我的代码:
public void onCreate(Bundle b) {
super.onCreate(b);
setContentView(R.layout.test_layout);
class MyDialogFragment extends DialogFragment implements OnClickListener{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.hello_world, container, false);
Button b = (Button)v.findViewById(R.id.btn);
b.setOnClickListener(this);
return v;
}
@Override
public void onClick(View v) {
dismiss();
}
}
getFragmentManager().beginTransaction().add(android.R.id.content, new MyDialogFragment(), "test").addToBackStack("b").commit();
}
@Override
public void onBackPressed() {
if (getFragmentManager().getBackStackEntryCount() > 0 ){
getFragmentManager().popBackStack();
} else {
super.onBackPressed();
}
} …Run Code Online (Sandbox Code Playgroud) 我正在编写如下的.sh脚本:
echo script started
./some_command > output_file
echo script ended
Run Code Online (Sandbox Code Playgroud)
我希望输出如下:
script started
./some_command > output_file
script ended
Run Code Online (Sandbox Code Playgroud)
我试过了set -v,set +v但它没有正常工作,
有什么类似@echo的批次?
谢谢
我对appcompat库中的样式如何工作很困惑.
根据这里:
我们现在在所有平台上使用Toolbar/ActionBar的支持实现,这意味着我们不再读取与操作栏相关的任何android:属性.
对于已经具有现有appcompat设置的应用程序,这意味着您应该删除在android命名空间中重新设置相同值的v14 +主题.请注意,这仅适用于影响操作栏的样式/小部件.
对于大多数应用程序,您现在只需要一个主题声明,值/
所以这是我的问题:
如果我想在API 14+中使用材料设计ActionBar,我可以使用appcompat_v7中提供的ActionBar/Toolbar并将其设置在公共值/文件夹中并删除"android:"命名空间?但为什么我看到人们在下面编写代码:
<style name="MyTheme" parent="Theme.AppCompat.Light.DarkActionBar">
....
<item name="windowContentOverlay">@null</item>
<item name="android:windowContentOverlay">@null</item>
....
</style>
Run Code Online (Sandbox Code Playgroud)
为什么"android:"命名空间呢?上面的代码与使用value-v21,value-v14,文件夹之间有什么区别?
有人可以解释或指导我找到正确的来源吗?
对于以下功能:
inline void A() {
...
B();
...
}
Run Code Online (Sandbox Code Playgroud)
是B也由编译器内联?
如果没有,我应该使B内联以提高性能吗?
我知道CPU可以重新排序指令
load A
load B
Run Code Online (Sandbox Code Playgroud)
但是CPU会重新排序以下代码吗?(换句话说,在另一个核心上运行的第二个线程会以相反的顺序看到结果吗?)
some_array[array_index] = new_value;
++array_index;
Run Code Online (Sandbox Code Playgroud)
我猜它永远不会因为第二行依赖于第一行.我对吗?