c++11专题提供c++11的最新资讯内容,帮你更好的了解c++11。
为了使用C 11和c 14功能,我有一个使用的编译应用程序 更新版本的 gcc(4.9.1),因此是更新版本的libstdc.该应用程序包含许多 小程序所以我将libstdc作为共享库而不是静态库链接 (即我不想使用-static-libstdc) 我希望使用/ opt // lib64下的应用程序发布新版本的libstdc (注意:根据GPL的例外,这是特别允许的) 新版本的libstdc .s
我想知道为什么std :: unique_ptr<>直接支持动态数组?但不是由std :: shared_ptr<>: unique_ptr<int[]> ptr1(new int[n]); /// OK! shared_ptr<int[]> ptr2(new int[n]); /// Incorrect: will not call delete[] 更新:我发现第二行可以改写为: shared
struct D { virtual void m() const = 0; }; struct D1 : public virtual D { }; struct D2 : public virtual D { }; struct B : public D2 { B() { } B(int val) : B() { } void m() const {
我正在尝试用自己的转换运算符编写一个类,但是我遇到了多个operator = s的问题 我设法用下面的小代码重现了这个问题 #include <string> class X { public: operator const char*() const { return "a"; } operator std::string() { return "c"; } }
我正在尝试一个简单的程序来打印steady_clock的时间戳值,如下所示: #include <iostream> #include <chrono> using namespace std; int main () { cout << "Hello World! "; uint64_t now = duration_cast<milliseconds>(steady_clock::no
假设如下: template <typename T> void foo (T*); // #1 template <typename T> void foo (T); // #2 template <> void foo (int*); // #3 当引入也具有重载的基本模板的显式特化时,在设计的重载解析期间不考虑特化.我理解这一点. 但是,鉴于我可以使#3成为非模
我正在使用最新的快照构建clang与最新的TDM- Gcc头和库.编译时(使用-std = c 11标志): #include <functional> #include <iostream> class Foo { public: void Bar(int x) { std::cout << x << std::endl;
std::string &func(int vlu) { std::string str; str = std::to_string(vlu) + "something"; return str; } 上述功能明显不安全. 以下是另一个版本. std::string &func(int vlu) { return std::to_string(vlu) + "so
例如: class Example { public: explicit Example(int n) : num(n) {} void addAndPrint(vector<int>& v) const { for_each(v.begin(), v.end(), [num](int n) { cout << num + n << " "; });
有两个向量std :: vector和QVector.我们必须检查插入时“移位”元素的方式. (用五个元素构造两个向量并插入零元素)我有这个代码: #include <QVector> #include <QTextStream> struct MoveTest { int i; MoveTest() {} MoveTest(
假设以下代码: #include <iostream> #include <vector> #include <string> int main() { std::vector<std::string> lines; lines.push_back("line"); for (const auto& s : lines) { std::cout << s;
以下代码在C 11中成功编译: #include "json.hpp" using json = nlohmann::json ; using namespace std ; int main(){ json js = "asd" ; string s1 = js ; // <---- compiles fine //string s2 = (string)js ; /
我使用 this answer样式的SFINAE,以便通过使用适当的成员函数调用泛型矢量对象.例如,下面的代码首先调用operator [](int)const,如果不存在则operator()(int)const: template<int I> struct rank : rank<I-1> { static_assert(I > 0, ""); }; template<> struct ra
我知道在C 11之前,auto关键字的含义完全不同;它是一个存储类型说明符,指示具有自动存储类型的对象(即放置在堆栈上). 这就是理论如何……你将如何实际使用这个关键字(语法),为什么?另外,我还没有在实际代码pre-C 11中看到过这个关键字;什么时候有用(什么时间段)? 它用于声明具有自动存储持续时间的局部变量(即“在堆栈上”). 至少从C90开始,它一直是一个无用的关键字,因为自动存储持续时
我有以下功能: int GetGroup(unsigned bitResult, int iStartPos, int iNumOfBites) { return (bitResult >> (iStartPos + 1- iNumOfBites)) & ~(~0 << iNumOfBites); } 该函数返回一个字节的位组. 即如果bitResult = 102(01100110)2,则iS
我有以下场景: 有两个组件,一个用C 11编写,另一个用C 98编写. 两者都是使用相同的GCC 4.9从头开始编译的.一个使用隐式默认值–std = gnu 98,另一个显式设置–std = c 11. 即使在做了一些研究后,如果这可能导致问题,我也无法完全回答这个问题. GCC wiki说: The C++98 language is ABI-compatible with the C++11
代码如下: struct Foo { Foo(int){} // no default constructor }; int main() { Foo* pFoo = new Foo[2]{1,2}; // OK in g++, fails in clang++! delete[] pFoo; } compiles in gcc,但是fails in clang.上面的代
我有一些工作线程定期执行时间关键处理(大约1 kHz).每个周期,工人都被唤醒做家务,每个人都应该(平均)在下一个周期开始之前完成.它们在同一个对象上运行,有时可以通过主线程进行修改. 为了防止竞争,但允许在下一个循环之前修改对象,我使用了一个自旋锁和一个原子计数器来记录仍有多少线程正在工作: class Foo { public: void Modify(); void DoWo
这是一个行话问题. 有几个总括术语来对C中的逻辑运算进行分组.例如: >对于析构函数,复制/移动赋值和构造函数:复制控制操作. 是否所有构造函数都有一个术语可以创建一个对象而无需复制或移动同一个类的另一个对象? 没有. 你也有“默认构造函数”和“converting constructor”,但我不认为他们有一个共同的术语来描述它们.
假设我有一个存储类型为T的对象的模板.我想传递构造函数参数以初始化数据成员.我应该使用统一初始化还是使用非花括号进行直接初始化?: template<typename T> struct X { template<typename... Args> X(Args&&... args) : t(std::forward<Args>(args)...) //