Tag: c ++ 11

在C ++中用auto来声明variables是否有缺点?

似乎auto是一个相当重要的function,在C ++ 11中join,似乎遵循了很多新的语言。 就像Python这样的语言,我还没有看到任何显式的variables声明(我不确定是否有可能使用Python标准)。 使用auto声明variables而不是显式声明variables是否有缺点?

std :: function vs模板

感谢C ++ 11,我们收到了函数包装器的std::function系列。 不幸的是,我一直听到这些新增加的坏消息。 最受欢迎的是它们非常缓慢。 我testing了它,他们真的与模板比较吸。 #include <iostream> #include <functional> #include <string> #include <chrono> template <typename F> float calc1(F f) { return -1.0f * f(3.3f) + 666.0f; } float calc2(std::function<float(float)> f) { return -1.0f * f(3.3f) + 666.0f; } int main() { using namespace std::chrono; const auto tp1 = system_clock::now(); for (int i = 0; […]

为什么在C ++ 11中使用非成员的开始和结束函数?

每个标准容器都有一个用于返回该容器迭代器的begin和end方法。 但是,C ++ 11显然引入了称为std::begin和std::end自由函数,它们调用begin和end成员函数。 所以,而不是写作 auto i = v.begin(); auto e = v.end(); 你会写 using std::begin; using std::end; auto i = begin(v); auto e = end(v); 在他的谈话中, Writing Modern C ++ ,Herb Sutter说,当你想要一个容器的开始或结束迭代器时,你应该总是使用自由函数。 但是,他没有详细说明为什么你想要。 看代码,它可以节省你所有的一个字符。 所以,就标准容器而言,免费function似乎完全没有用处。 Herb Sutter表示,对非标准容器有好处,但他没有详细说明。 所以,问题是std::begin和std::end的自由函数版本究竟做了什么,除了调用相应的成员函数版本之外,为什么要使用它们?

unique_ptr和shared_ptr之间的区别

可能重复: pimpl:shared_ptr或unique_ptr 智能指针(boost)解释 有人可以解释shared_ptr和unique_ptr之间的区别吗?

cbegin / cend背后的原因是什么?

我想知道为什么cbegin和cbegin是在C ++ 11中引入的? 什么情况下调用这些方法与const的重载begin和end什么不同?

函数声明后的= delete的含义

class my_class { … my_class(my_class const &) = delete; … }; 在这种情况下, = delete是什么意思? 还有没有其他的“修饰符”(除了= 0和= delete )?

为什么我会使用push_back而不是emplace_back?

C ++ 11vector具有新的函数emplace_back 。 与依靠编译器优化来避免副本的push_back不同, emplace_back使用完美的转发将参数直接发送给构造函数以便就地创build对象。 在我看来, emplace_back所有的push_back都可以做,但有些时候它会做得更好(但从不会更糟糕)。 我有什么理由使用push_back ?

lambda函数可以模板化吗?

在C ++ 11中,有没有办法模拟一个lambda函数? 或者它本身是太具体的模板? 我明白,我可以定义一个经典的模板类/函子,但问题更像是:该语言是否允许模板lambda函数?

什么是这个疯狂的C ++ 11语法==> struct:bar {} foo {};?

这在C ++ 11中可能意味着什么? struct : bar {} foo {};

常量vs constexpr上的variables

以下定义有区别吗? const double PI = 3.141592653589793; constexpr double PI = 3.141592653589793; 如果不是,在C ++ 11中哪种风格是首选?