小编K-b*_*llo的帖子

const在C++ 11中是否意味着线程安全?

我听说const意味着线程安全C++ 11.真的吗?

这是否意味着const现在是等效的Javasynchronized

他们的关键字用完了吗?

c++ const c++-faq thread-safety c++11

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

使用自定义操作启动活动

我希望使用自定义操作在我的应用中启动活动.我找到了一些答案,但我尝试的所有内容都会java.lang.RuntimeException说没有找到任何活动来处理Intent {act = com.example.foo.bar.YOUR_ACTION}.

这是我的清单文件中的活动:

<activity
    android:name=".FeedbackActivity" >  
    <intent-filter>
        <action android:name="com.example.foo.bar.YOUR_ACTION" />
    </intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)

这就是我开始活动的方式:

Intent intent = new Intent("com.example.foo.bar.YOUR_ACTION");
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激.

android android-intent android-activity

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

用SFINAE检测constexpr

我正在努力升级一些C++代码以利用C++ 11中的新功能.我有一个特性类,其中有一些函数返回基本类型,这些函数大部分时间(但并不总是)返回一个常量表达式.我想根据功能是否做不同的事情constexpr.我提出了以下方法:

template<typename Trait>
struct test
{
    template<int Value = Trait::f()>
    static std::true_type do_call(int){ return std::true_type(); }

    static std::false_type do_call(...){ return std::false_type(); }

    static bool call(){ return do_call(0); }
};

struct trait
{
    static int f(){ return 15; }
};

struct ctrait
{
    static constexpr int f(){ return 20; }
};

int main()
{
   std::cout << "regular: " << test<trait>::call() << std::endl;
   std::cout << "constexpr: " << test<ctrait>::call() << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

额外的int/ ...参数是这样的,如果两个函数在SFINAE之后可用,则第一个函数通过重载分辨率来选择. …

c++ templates sfinae constexpr c++11

35
推荐指数
1
解决办法
3983
查看次数

空基类优化现在是强制优化(至少对于标准布局类)?

根据C++ 11 9.1/7(draft n3376),标准布局类是一个类:

  • 没有非标准布局类(或此类类型的数组)或引用类型的非静态数据成员,

  • 没有虚函数(10.3),也没有虚基类(10.1),

  • 对所有非静态数据成员具有相同的访问控制(Clause11),

  • 没有非标准布局基类,

  • 或者在最派生类中没有非静态数据成员,并且最多只有一个具有非静态数据成员的基类,或者没有具有非静态数据成员的基类,并且

  • 没有与第一个非静态数据成员相同类型的基类.

因此,空类是标准布局类; 并且另一个以空类作为基类的类也是标准布局类,前提是此类的第一个非静态数据成员与基类的类型不同.

此外,9.2/19指出:

指向标准布局结构对象的指针(适当地使用a转换)reinterpret_cast指向其初始成员(或者如果该成员是位字段,则指向它所驻留的单元),反之亦然.[注意:因此,在标准布局结构对象中可能存在未命名的填充,但不是在其开头,以实现适当的对齐. - 尾注]

这似乎暗示空基类优化现在是强制优化,至少对于标准布局类.我的观点是,如果没有强制执行空基本优化,那么标准布局的布局将不是标准的,而是取决于实现是否实现所述优化.我的推理是正确的,还是我错过了什么?

c++ language-lawyer c++11

27
推荐指数
1
解决办法
1552
查看次数

为什么没有std :: protect?

为什么在C++ 11中没有std::protect和它一起使用?std::bind

Boost.Bind提供了一个boost::protect帮助器,它包装了它的参数,因此boost::bind无法识别和评估它.std::[c]ref在大多数情况下,它将是一个足够好的替代品,除了它不会将右值作为参数.

举一个具体的例子,考虑以下人为情况:

#include <type_traits>
#include <functional>

int add(int a, int b)
{ return a + b; }

struct invoke_with_42
{
    template <typename FunObj>
    auto operator()(FunObj&& fun_obj) const -> decltype((fun_obj(42)))
    { return fun_obj(42); }
};

int main()
{
    //// Nested bind expression evaluated
    //auto bind_expr =
    //    std::bind<int>(invoke_with_42{}
    //      , std::bind(&add, 1, std::placeholders::_1));

    //// Compilation error, cref does not take rvalues
    //auto bind_expr =
    // …
Run Code Online (Sandbox Code Playgroud)

c++ c++11

24
推荐指数
1
解决办法
1601
查看次数

Overload resolution with ref-qualifiers

While working with ref-qualified function overloads, I'm getting different results from GCC (4.8.1) and Clang (2.9 and trunk). Consider the following code:

#include <iostream>
#include <utility>

struct foo
{
    int& bar() &
    {
        std::cout << "non-const lvalue" << std::endl;
        return _bar;
    }
    //~ int&& bar() &&
    //~ {
    //~     std::cout << "non-const rvalue" << std::endl;
    //~     return std::move(_bar);
    //~ }
    int const& bar() const &
    {
        std::cout << "const lvalue" << std::endl;
        return _bar;
    }
    int const&& bar() const …
Run Code Online (Sandbox Code Playgroud)

c++ overloading language-lawyer c++11 ref-qualifier

20
推荐指数
1
解决办法
2304
查看次数

访问二维数组是否合法,就好像它是一维的一样?

可能重复:
我可以将2D数组视为连续的1D数组吗?

请考虑以下代码:

int array2d[10][10];
int *array1d = array2d[0];
Run Code Online (Sandbox Code Playgroud)

我从来没有听说过一个无法实现的实现,但访问和操作array2d通过array1d是否合法?标准的哪个部分允许这个?标准中是否存在阻止实现在每个第二级数组之间插入额外空间或填充的内容(不是它需要的,但仍然)?

奖金问题:有没有一种方法可以访问,array2d因为int[100]它不需要一个reinterpret_cast或一个C风格的?

c++ language-lawyer

14
推荐指数
1
解决办法
259
查看次数

使用命名空间导致名称隐藏吗?

请考虑以下代码:

namespace C {
    class X {};
}

namespace A {
    class X {};

    namespace B {
        using namespace C;

        X x;
    }
}
Run Code Online (Sandbox Code Playgroud)

我期待的类型xC::X由于using namespace指令,而是既VS2010和在线LLVM/Clang的编译器解决X了命名空间内BA::X.使用using声明(using C::X)更改using指令,然后它会C::X按预期解析.

标准说明使用指令[7.3.4.2]:

using-directive指定指定命名空间中的名称可以在using-directive出现在using-directive之后的范围内使用.在非限定名称查找(3.4.1)期间,名称看起来好像是在最近的封闭命名空间中声明的,其中包含using-directive和指定的命名空间.

我对此的解读是,C::X应该看起来好像在命名空间中声明B,有效地隐藏A::X.标准的哪个部分是在使用指令和使用声明之间的这种不一致的背后?有没有办法通过using指令隐藏外部作用域的名称?

c++ namespaces language-lawyer

12
推荐指数
1
解决办法
607
查看次数

内联运营商好吗?

运算符和其他方法在C++中进行内联是否有任何区别?我已经搜索过它,但这不是一个常见的问题,正如我所看到的那样.有没有人有充分的理由使用它或避免?注意:显然,我的意思是内联运算符,当它们很小时.

c++ operators inline-method

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

小缓冲区优化和对齐

我正在编写一个围绕遗留API 的C++包装器.这个API为我提供了一个指针值来保存额外的数据,我想用它实现小缓冲区优化.

我已经实现了一个is_small_pod 元函数,它检查给定的类型是否是POD并且它适合于void*:

template< typename Type >
struct is_small_pod
  : std::integral_constant<
        bool
      , std::is_pod< Type >::type::value
        && sizeof( Type ) <= sizeof( void* )
    >
{};
Run Code Online (Sandbox Code Playgroud)

我正在设置这样的值:

// void*& param;
if( detail::is_small_pod< Type >() )
{
    *static_cast< Type* >( &param ) = value;
} else {
    param = new Type( value );
}
Run Code Online (Sandbox Code Playgroud)

我是否正确实施此优化?我相信当值对齐与指针的对齐不兼容时(这可能是奇数角的情况),这将失败.这种情况是否可能,或者我只是过度思考它?我应该如何扩展我的元函数以检查兼容的对齐

c++ c++11

10
推荐指数
1
解决办法
1244
查看次数