以下代码在libstdc上触发静态断言: #include <utility>
using t = decltype(std::declval<const void>); 应该是? 这个问题的动机: 以下声明实现proposed by Eric Niebler(显然是编译时优化) template<typename _Tp, typename _Up = _Tp&&>
_Up __declval
默认构造函数由C编译器生成,用户无法控制它们.他们可以扔吗?在声明一个时,是否可以指定noexcept? 以下代码使用gcc编译好. struct A
{
A() = default;
};
struct B
{
B() noexcept = default;
};
int main()
{
A a;
B b;
return 0;
} 允许向默认的特殊成员函数(默认构造函
我在使用C 11 std :: mutex时遇到了一些麻烦 在我的课堂上,我有一个名为std :: mutex的信号量变量. 所以我在我的关键部分之前和之后定位了我的semaphore.lock()和semaphore.unlock() class Database {
public:
Database(string, string, string, string);
virtual ~Datab
我正在玩一些玩具代码,使用c 11来更多地了解事情的工作原理.在此期间,我遇到了以下问题,简化为: template <int x, int y>
class add {
public:
static constexpr int ret = x + y;
};
constexpr int addFunc(const int x, const int y) {
return add
以下C11程序是否形成错误? struct a
{
struct b { };
void f() {};
};
extern struct a b;
struct a ::b;
int main()
{
b.f();
} 为什么不为甚么 这里感兴趣的是这一行: struct a ::b; 这是内部类的前向声明a :: b? 或者这是全局变量b的定义?相当于: st
考虑以下两点: template <class Function>
void apply(Function&& function)
{
std::forward<Function>(function)();
} 和 template <class Function>
void apply(Function&& function)
{
function();
} 在什么情况下有差异,
目前,如果要否定谓词,则必须使用std ::< algorithm> _if_not变体或lambda.但是为了学术,我想知道这是否可行: std::string s("hello");
std::find_if(s.begin(), s.end(), std::not1(::ispunct)); 如果不编写自己的函数对象,如何使这段代码工作? 请记住,将字符传递给来自C标准库的字符分类函数(以及
对于多项式方程求解器,将其模板化以使任何类型可用是很好的: template <class number, int degree>
class PolynomialEquation
{
public:
private:
array<number, degree+1> myEquation;
array<complex<number>, degree> equationResult
当C11对使用noexcept限定词声明的其他函数进行调用时,C 11是否提供内联函数或方法的任何保证? class My_String { ...
const char * c_str () const noexcept;
inline operator const char * () const { return c_str(); }
}; 我假设优化编译器可以自由地实现没有
参见英文答案 > Using `std::function<void(…)>` to call non-void function 3个 根据C 11或C 14标准,下面的代码是否有效? #include <functional>
int ReturnInt()
{
return 5;
}
int main( int a
我想要匹配从给定单词开始的所有行,说iheap.如果我没有错误的正则表达式(在ECMAScript语法中)“^ iheap.*”应该做的伎俩.但是,当我使用libc的正则表达式库在C 11中进行测试时,只有第一行匹配.所以“^ …”似乎只匹配开头的输入而不是起始行. 这是一个例子: #include <string>
#include <regex>
#include <iostream>
us
我(模糊地)知道如果没有使用模板,则不会实例化.例如,即使T = int,T :: type也没有意义,以下代码将会很好地编译. template<typename T>
struct A
{
void f() { using type = typename T::type; }
};
A<int> a; //ok 它编译因为f()不被使用,所以它不被实例化 – 因此T :: type的
我是新的std :: thread.我需要把线程从另一个线程睡觉,是可能吗?在示例中,我看到的代码如下: std::this_thread::sleep_for(std::chrono::seconds(1)); 但是我想做的就是这样: std::thread t([]{...});
t.sleep(std::chrono::seconds(1)); 要么 sleep(t,std :: c
我尝试向某些新的代码介绍一些const正确性(实际功能范例),发现我不能通过std :: shared_ptr< A>到一个期望std :: shared_ptr< A const>的函数.请注意,我不想抛弃const,而是介绍它,这与原始指针是合法的. 有没有办法解决这个问题?我没有找到一个成员函数来做到这一点. g 4.6.1发出的精确错误是: error: no matching funct
我理解lambda功能和它在c 11中的目的.但是我不明白“捕获值”和“传递参数”之间的区别. 例如.. #include <iostream>
#include <functional>
using namespace std;
int add(int a,int b){
return a+b;
}
int main(int argc, char** argv){
func
有没有办法用C 11功能替代 Xmacro成语,最好不要使用预处理器?我正在考虑可以使用元组模板,但我仍然在努力学习这些工作原理. XMacros是进行各种各样事情的一般工具.其中许多(例如创建枚举器,字符串等)的列表远远超出了任何类型的模板的功能. 可能有些情况下您可能会找到替换模板的方法.但当然不是全部.
给出这个代码: struct A {
A(int e) { throw e; }
};
struct B {
A a{42}; // Same with = 42; syntax
};
int main() {
try {
B b;
} catch (int const e) {
return e;
}
} 当编译GCC(
对不起,过于模糊的标题(由于缺乏我的英语技能).请建议一个更好的标题. 请考虑以下代码. struct A {
typedef std::vector<double> State;
// template <class... Args>
// A(Args... args)
// : a(args...)
// {}
templa
我有一个类,我想在不同的线程中使用它,我想我可以使用std :: atomic这样的: classs A
{
int x;
public:
A()
{
x=0;
}
void Add()
{
x++;
}
void Sub()
{
x--;
}
}; 在我
考虑以下伪代码: expected = null;
if (variable == expected)
{
atomic_compare_exchange_strong(
&variable, expected, desired(), memory_order_acq_rel, memory_order_acq);
}
return variable; 观察当执行变量==期