小编Gur*_*pof的帖子

`std :: make_shared <POD>()`值是否初始化了我的POD?

std::make_shared<POD>()值是否初始化了我的POD?

如果是,这是否由标准保证?

如果没有(我怀疑),有没有办法做到这一点?我想std::make_shared<POD>(POD())会这样做但是我应该做什么?

c++ shared-ptr c++11

10
推荐指数
3
解决办法
908
查看次数

如何防止boost :: optional <T>被错误地构造为0?

boost::optional<T>(1.51)提供了一种构建对我的用户非常危险的对象的方法,我想阻止它.假设我有自己的整数类,我想传递一个可选的这样的整数并将其存储在某个类中:

class myint {
public:
    int m_a;
    myint (int r_a) : m_a(r_a) {
    }
};

struct myclass {
    boost::optional<myint> content;
    myclass (const boost::optional<myint>& arg) : content(arg) {
    }
};
Run Code Online (Sandbox Code Playgroud)

现在,这是用户如何使用该类:

myclass(myint(13));            //correct use
myclass(boost::none);          //correct use
myclass(myint(0));             //correct use
myclass(0);                    //INCORRECT use, this easy typo
                               //equates boost::none which
                               //is not what the user meant
Run Code Online (Sandbox Code Playgroud)

我想了解这里发生了什么,并防止这种行为.


有趣的是,

myclass(1);              //does not compile
Run Code Online (Sandbox Code Playgroud)

boost::none对于我的领域来说,这完全是一个有效的价值,但是boost::none当用户试图输入时,有一个偷偷摸摸的东西0是极其误导和危险的.

意图可能有点隐藏,因为我并没有真正推出一个myint课程而且我真的class myclass没有任何目的.无论如何,我需要向函数发送10个左右的可选ints,并且重复数据删除不起作用.(你可以想象我问你的年龄,身高和财富,还有三个特殊按钮可以检查你是否不想回答问题)


我发布了一个似乎在下面工作的答案(根据Mooing的Duck&Ilonesmiz建议,但更轻).不过,我很高兴听到有关它的评论.

c++ boost boost-optional

8
推荐指数
1
解决办法
1186
查看次数

即使我知道如何/何时重载operator ==,为什么我应该这样做?

假设我正在设计一个供其他人使用的对象集合,并假设我已阅读并理解(呵呵?)关于operator ==和Equals()之间差异的大多数线程,为什么我应该实现operator ==?

这个线程中窃取一个例子,使用它可能非常容易出错:

object x = "hello";
object y = 'h' + "ello"; // ensure it's a different reference
(x == y); // evaluates to FALSE
string x = "hello";
string y = 'h' + "ello"; // ensure it's a different reference
(x == y); // evaluates to TRUE
Run Code Online (Sandbox Code Playgroud)

那么,我可以告诉我的用户只使用Equals()和ReferenceEquals(),那就是它吗?我在那里错过了什么?

  • 是否有可能使用==的标准代码库的部分并且没有办法绕过它?

  • 在某些重要案例中,==表现更好吗?(好吧,好吧,Equals是虚拟的,所以它总是会慢一点,但我看不出任何实际上成为瓶颈的用例)

  • 别的什么?

c#

7
推荐指数
1
解决办法
152
查看次数

SurfaceTexture是否能够在活动暂停/恢复周期中存活?

下面是我在一个活动的onResume()部分将SurfaceTextureListener附加到TextureView的实验.

  • 新开始:表面纹理可用("onSurfaceTextureAvailable")

  • 取向变化:正如我所料,表面纹理被破坏("onSurfaceTextureDestroyed"),然后表面纹理可用("onSurfaceTextureAvailable").

现在,这让我感到惊讶:

  • 在任务切换然后恢复:表面纹理不被破坏(没有"onSurfaceTextureDestroyed")并且表面纹理不可用(没有"onSurfaceTextureAvailable")

在这些条件下,我保证旧的SurfaceTexture是否有效?如何确保我确实知道我的SurfaceTexture何时可用?为什么方向更改与任务切换不同,我应该如何知道?


public class MainActivity extends AppCompatActivity {
    private final String TAG = "MainActivity";
    TextureView mTextureView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mTextureView = (TextureView) findViewById(R.id.textureView);
     }

    @Override
    public void onResume() {
        super.onResume();
        mTextureView.setSurfaceTextureListener(new TextureView.SurfaceTextureListener() {
            @Override
            public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
                Log.d(TAG, "onSurfaceTextureAvailable");
            }
            @Override
            public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {
                Log.d(TAG, "onSurfaceTextureSizeChanged");
            }
            @Override
            public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
                Log.d(TAG, "onSurfaceTextureDestroyed");
                return …
Run Code Online (Sandbox Code Playgroud)

android

7
推荐指数
1
解决办法
1980
查看次数

切换枚举类的所有项目时的默认情况编译

为什么以下开关甚至编译默认情况,因为它涵盖了枚举类的所有项目?我本来会认为这是enum class首先拥有强大的原因。

至于为什么我想要违约,即使我知道我涵盖了所有情况:这可以保护我免受我未来的粗心(以及其他同事的粗心)

enum class E {
    a,
    b
};

int main()
{
    E c = E::b;
    switch (c) {
        case E::a:
        case E::b:
            std::cout << "pass" << std::endl;
            break;
        default:
            static_assert(false, "This explodes!");
    }    
}
Run Code Online (Sandbox Code Playgroud)

证明

c++ enums c++11

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

为什么我的ViewPager超出CoordinatorLayout的范围?

由于某些我无法理解的原因,下图中的Viewpager会因菜单的大小而溢出。我可能没有描绘任何东西,但看不到。

如您所见,被选中的ViewPager越界

<android.support.design.widget.AppBarLayout
    android:id="@+id/appbar"
    android:layout_width="match_parent"
    android:layout_height="160dp"
    android:paddingTop="@dimen/appbar_padding_top"
    android:theme="@style/AppTheme.AppBarOverlay">

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="wrap_content"
        android:layout_height="160dp"
        >
    </android.support.v7.widget.Toolbar>

</android.support.design.widget.AppBarLayout>

<android.support.v4.view.ViewPager
    android:id="@+id/container"
    android:layout_width="match_parent"

    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    />
Run Code Online (Sandbox Code Playgroud)

android android-layout

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

声明为异步的方法的正确语法是什么?

在重写过程中我偶然发现了以下ES6方法:

async getUsers(res) {
  User.findAll().then(users => res.json(users));
}
Run Code Online (Sandbox Code Playgroud)

这对我来说似乎有点儿麻烦.我原以为是:

async getUsers(res) {
  return User.findAll().then(users => res.json(users));
}
Run Code Online (Sandbox Code Playgroud)

但是,我知道async有许多技巧,比如自动包装承诺,我的直觉也是正确的吗?

javascript async-await es6-class

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

AWS Step Function中的lambda是否可以知道启动它的Step函数的“执行名称”?

我拥有有时可能会失败的步进功能,我想将此记录在(发电机)数据库中。方便的是,如果我可以创建一个新的错误处理步骤,而那个家伙只是从某个地方(在上下文中找不到它)拿起“执行名称”,并将其记录为失败。

那可能吗?

aws-lambda aws-step-functions

5
推荐指数
3
解决办法
2709
查看次数

用于C++ 11支持的错误编译器版本的存储库

我有一个C++软件,可以使用不同的操作系统,平台和编译器进行编译.现在有时编译器会出现错误,例如这个错误,这意味着gcc版本4.6.4之前和4.7.3之前是不行的.现在我可以包含一个显示错误的单元测试(也许这个问题将揭示确实这就是我应该做的事情),但这是一项繁琐的工作:编译器错误有时难以重现并且将其转换为单元测试可能不会很容易......当你手头有平台和编译器时就是这样.

我正在寻找的是一个存储库,告诉我哪些版本的g ++,clang ++和msvc ++遭受了支持C++ 11的致命错误(我不是在谈论缺少的功能,当功能不存在时我会解决它们) .在构建系统中使用它们构建时,我会致命崩溃.不错的功能是,我甚至没有被迫发现一个禁止编译器的bug(所以我为自己节省了未来的麻烦).

这样的清单是否存在?

c++ build c++11

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

插座故障与EOF和连接重置之间的区别

为了测试网络应用程序,我编写了一个asio端口"proxy":它在套接字上侦听应用程序客户端活动,并将所有传入的数据包发送到应用程序服务器监听的另一个套接字,然后返回.

现在,当应用程序或服务器因各种原因断开连接时,"代理"通常会获得EOF,但有时会收到"连接重置".

因此,问题是:套接字何时因"连接重置"错误而失败?

sockets linux networking

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