小编Mon*_*ter的帖子

返回const引用vs临时对象

我想知道为什么返回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也是合法的吗?

c++ const reference

8
推荐指数
2
解决办法
3454
查看次数

如何在C#中隐式停止对象中的线程

我有一个包含工作线程的对象.我想在对象超出范围时杀死线程.

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)

c# dispose

6
推荐指数
1
解决办法
1367
查看次数

Android 5.0中的微调框弹出背景色

我有一个简单的微调器,我想改变微调器弹出窗口的背景颜色.但是,当我尝试使用xml中的" android:popupBackground "或代码中的setPopupBackgroundResource()设置它时,我得到了一个奇怪的旋转器,如下图所示

spinner_1

如果我没有设置弹出背景颜色使用预材料设计主题,一切都很好.有谁知道什么是错的?

布局

<?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)

android popup spinner android-appcompat

5
推荐指数
0
解决办法
3251
查看次数

DialogFragment dismiss()不会弹出堆栈

根据文档,我有一个简单的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)

android fragment android-fragments

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

禁止`set -v` /`set -x`只记录bash中的一行

我正在编写如下的.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的批次?

谢谢

bash echo

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

appcompat库样式如何工作

我对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,文件夹之间有什么区别?

有人可以解释或指导我找到正确的来源吗?

android styles android-appcompat

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

内联函数中的内联函数

对于以下功能:

inline void A() {
   ...
   B();
   ...
}
Run Code Online (Sandbox Code Playgroud)

B也由编译器内联?

如果没有,我应该使B内联以提高性能吗?

c++ inline

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

cpu是否重新排序相互依赖的指令?

我知道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)

我猜它永远不会因为第二行依赖于第一行.我对吗?

c++ cpu barrier

-2
推荐指数
1
解决办法
132
查看次数