我听说const
意味着线程安全的C++ 11.真的吗?
这是否意味着const
现在是等效的Java的synchronized
?
他们的关键字用完了吗?
我希望使用自定义操作在我的应用中启动活动.我找到了一些答案,但我尝试的所有内容都会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)
任何帮助将不胜感激.
我正在努力升级一些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++ 11 9.1/7(draft n3376),标准布局类是一个类:
没有非标准布局类(或此类类型的数组)或引用类型的非静态数据成员,
没有虚函数(10.3),也没有虚基类(10.1),
对所有非静态数据成员具有相同的访问控制(Clause11),
没有非标准布局基类,
或者在最派生类中没有非静态数据成员,并且最多只有一个具有非静态数据成员的基类,或者没有具有非静态数据成员的基类,并且
没有与第一个非静态数据成员相同类型的基类.
因此,空类是标准布局类; 并且另一个以空类作为基类的类也是标准布局类,前提是此类的第一个非静态数据成员与基类的类型不同.
此外,9.2/19指出:
指向标准布局结构对象的指针(适当地使用a转换)
reinterpret_cast
指向其初始成员(或者如果该成员是位字段,则指向它所驻留的单元),反之亦然.[注意:因此,在标准布局结构对象中可能存在未命名的填充,但不是在其开头,以实现适当的对齐. - 尾注]
这似乎暗示空基类优化现在是强制优化,至少对于标准布局类.我的观点是,如果没有强制执行空基本优化,那么标准布局类的布局将不是标准的,而是取决于实现是否实现所述优化.我的推理是正确的,还是我错过了什么?
为什么在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) 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) 可能重复:
我可以将2D数组视为连续的1D数组吗?
请考虑以下代码:
int array2d[10][10];
int *array1d = array2d[0];
Run Code Online (Sandbox Code Playgroud)
我从来没有听说过一个无法实现的实现,但访问和操作array2d
通过array1d
是否合法?标准的哪个部分允许这个?标准中是否存在阻止实现在每个第二级数组之间插入额外空间或填充的内容(不是它需要的,但仍然)?
奖金问题:有没有一种方法可以访问,array2d
因为int[100]
它不需要一个reinterpret_cast
或一个C风格的?
请考虑以下代码:
namespace C {
class X {};
}
namespace A {
class X {};
namespace B {
using namespace C;
X x;
}
}
Run Code Online (Sandbox Code Playgroud)
我期待的类型x
是C::X
由于using namespace
指令,而是既VS2010和在线LLVM/Clang的编译器解决X
了命名空间内B
是A::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++中进行内联是否有任何区别?我已经搜索过它,但这不是一个常见的问题,正如我所看到的那样.有没有人有充分的理由使用它或避免?注意:显然,我的意思是内联运算符,当它们很小时.
我正在编写一个围绕遗留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* >( ¶m ) = value;
} else {
param = new Type( value );
}
Run Code Online (Sandbox Code Playgroud)
我是否正确实施此优化?我相信当值对齐与指针的对齐不兼容时(这可能是奇数角的情况),这将失败.这种情况是否可能,或者我只是过度思考它?我应该如何扩展我的元函数以检查兼容的对齐?