Tag: c ++ 11

std :: to_string – 重载函数的实例超过参数列表

counter是一个int void SentryManager::add(std::string name,std::shared_ptr<Sentry>){ name = name + std::to_string(counter); } 什么是阻止这个错误的最好方法? 当我懒惰的时候,我只是把这个东西做了long long的long long ,但我相信有一个更好的解决方法。 错误信息: sentrymanager.cpp(8): error C2668: 'std::to_string' : ambiguous call to overloaded function 我正在使用Visual C ++ 2010 Express。

这是C + + 11正则expression式错误我还是编译器?

好的,这不是我遇到这个问题的原始程序,但是我把它复制到了一个更小的程序中。 很简单的问题。 main.cpp中: #include <iostream> #include <regex> using namespace std; int main() { regex r1("S"); printf("S works.\n"); regex r2("."); printf(". works.\n"); regex r3(".+"); printf(".+ works.\n"); regex r4("[0-9]"); printf("[0-9] works.\n"); return 0; } 用这个命令编译成功,没有错误信息: $ g++ -std=c++0x main.cpp 顺便提一句, g++ -v的最后一行是: gcc version 4.6.1 (Ubuntu/Linaro 4.6.1-9ubuntu3) 而当我尝试运行它的结果: $ ./a.out S works. . works. .+ works. terminate […]

C ++ 11 – 在constexpr函数内的static_assert?

如何在constexpr函数中正确地执行static_assert ? 例如: constexpr int do_something(int x) { static_assert(x > 0, "x must be > 0"); return x + 5; } 这是无效的C ++ 11代码,因为一个constexpr函数只能包含一个return语句。 我不认为这个标准有一个例外,但是GCC 4.7不允许我编译这个代码。

重新使用移动的容器?

什么是重用移动的容器的正确方法? std::vector<int> container; container.push_back(1); auto container2 = std::move(container); // ver1: Do nothing //container2.clear(); // ver2: "Reset" container = std::vector<int>() // ver3: Reinitialize container.push_back(2); assert(container.size() == 1 && container.front() == 2); 从我在C ++ 0x标准草案中读到的内容; ver3似乎是正确的方法,因为移动后的对象在 “除非另有规定,否则此类移动物体应置于有效但未指明的状态。” 我从来没有发现任何情况下,“否则指定”。 虽然我发现ver3有点迂回,会有很多首选的ver1,尽pipevec3可以允许一些额外的优化,但另一方面可能容易导致错误。 我的假设是否正确?

C ++中的易失性11

在C ++ 11标准中,机器型号从单线程机器变成了multithreading机器。 这是否意味着典型的static int x; void func() { x = 0; while (x == 0) {} } static int x; void func() { x = 0; while (x == 0) {} } static int x; void func() { x = 0; while (x == 0) {} }优化出读的例子将不再发生在C + + 11? 编辑:对于那些不知道这个例子(我很惊讶),请阅读: https : //en.wikipedia.org/wiki/Volatile_variable […]

C ++ 11“自动”语义

当我使用C ++ 11 auto ,关于是否将parsing为值或引用,types推导的规则是什么? 例如,有时很明显: auto i = v.begin(); // Copy, begin() returns an iterator by value 这些不太清楚: const std::shared_ptr<Foo>& get_foo(); auto p = get_foo(); // Copy or reference? static std::shared_ptr<Foo> s_foo; auto sp = s_foo; // Copy or reference? std::vector<std::shared_ptr<Foo>> c; for (auto foo: c) { // Copy for every loop iteration?

C ++:macros可以将“abc”扩展为“a”,“b”,“c”吗?

我写了一个variadic模板,接受可变数量的char参数,即 template <char… Chars> struct Foo; 我只是想知道是否有任何macros技巧,可以让我用类似于以下语法来实例化这个: Foo<"abc"> 要么 Foo<SOME_MACRO("abc")> 要么 Foo<SOME_MACRO(abc)> 等等 基本上,任何阻止你单独写字符的东西,就像这样 Foo<'a', 'b', 'c'> 这对我来说不是一个大问题,因为它只是一个玩具程序,但我想我会问。

如何将std :: chrono :: time_point转换为具有小数秒的日历date时间string?

如何将std :: chrono :: time_point转换为具有小数秒的日历date时间string? 例如:“10-10-2012 12:38:40.123456”。

什么时候应该使用std :: thread :: detach?

有时我必须使用std::thread来加速我的应用程序。 我也知道join()等待一个线程完成。 这很容易理解,但调用detach()和不调用它有什么区别? 我认为没有detach() ,线程的方法将独立工作使用一个线程。 不分离: void Someclass::Somefunction() { //… std::thread t([ ] { printf("thread called without detach"); }); //some code here } 呼叫与分离: void Someclass::Somefunction() { //… std::thread t([ ] { printf("thread called with detach"); }); t.detach(); //some code here }

自动生成移动操作的规则是什么?

在C ++ 98中,C ++编译器可以自动生成拷贝构造函数和拷贝赋值操作符,例如通过成员拷贝 struct X { std::string s; std::vector<int> v; int n; }; 编译器自动生成X拷贝构造函数和拷贝赋值操作符,使用成员级拷贝。 但是,在移动语义的情况下,C ++ 11中的事情是如何改变的? 移动 构造函数和移动 赋值运算符是否 自动生成,如复制构造函数和复制赋值运算符? 有没有移动操作不会自动生成的情况?