C++ 11向量具有新功能emplace_back
.与push_back
依赖于编译器优化以避免副本的情况不同,emplace_back
使用完美转发将参数直接发送到构造函数以就地创建对象.在我看来,emplace_back
一切都push_back
可以做到,但有些时候它会做得更好(但从来没有更糟).
我有什么理由使用push_back
?
当我运行如下的简单代码时,我有两个错误如下:
#include <iostream>
#include <string>
using namespace::std;
template <class Type>
class Stack
{
public:
Stack (int max):stack(new Type[max]), top(-1), maxsize(max){}
~Stack (void) {delete []stack;}
void Push (Type &val);
void Pop (void) {if (top>=0) --top;}
Type& Top (void) {return stack[top];}
//friend ostream& operator<< (ostream&, Stack&);
private:
Type *stack;
int top;
const int maxSize;
};
template <class Type>
void Stack <Type>:: Push (Type &val)
{
if (top+1<maxsize)
stack [++top]=val;
}
Run Code Online (Sandbox Code Playgroud)
错误:
MSVCRTD.lib(crtexew.obj):错误LNK2019:
_WinMain@16
函数中引用的未解析的外部符号___tmainCRTStartup
我该怎么办?
在C++ 14中,关联容器似乎已从C++ 11改变 - [associative.reqmts]/13说:
成员函数模板
find
,count
,lower_bound
,upper_bound
,并且equal_range
不得,除非类型参与重载决议Compare::is_transparent
存在.
使比较器"透明"的目的是什么?
C++ 14还提供了这样的库模板:
template <class T = void> struct less {
constexpr bool operator()(const T& x, const T& y) const;
typedef T first_argument_type;
typedef T second_argument_type;
typedef bool result_type;
};
template <> struct less<void> {
template <class T, class U> auto operator()(T&& t, U&& u) const
-> decltype(std::forward<T>(t) < std::forward<U>(u));
typedef *unspecified* is_transparent;
};
Run Code Online (Sandbox Code Playgroud)
因此,例如,std::set<T, std::less<T>>
将不会有一个透明的比较,而是std::set<T, std::less<>> …
我正在尝试使用计时库来定时器和持续时间.
我希望能够Duration frameStart;
(从app开始)和a Duration frameDelta;
(帧之间的时间)
我需要能够以frameDelta
毫秒和浮点秒的形式获得持续时间.
你如何使用新的c ++ 11 <chrono>
库做到这一点?我一直在努力和谷歌搜索(信息稀疏).代码是模板化的,需要特殊的演员和东西,我无法弄清楚如何正确使用这个库.
我对std::unique_lock
工作时的作用感到有些困惑std::condition_variable
.据我理解的文档,std::unique_lock
基本上是一个臃肿锁定挡板,以交换两个锁之间的状态的可能性.
到目前为止我已经pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex)
用于此目的(我猜这是STL在posix上使用的).它需要一个互斥锁,而不是锁.
这有什么区别?std::condition_variable
处理std::unique_lock
优化的事实是什么?如果是这样,它究竟是如何更快?
是否可以检查a std::future
是否已经完成?据我所知,唯一的方法就是调用wait_for
零持续时间并检查状态是否ready
存在,但是有更好的方法吗?
我想在Mac终端中编译C++ 11源代码但是失败了.我试过g++ -std=c++11
,g++ -std=c++0x
,g++ -std=gnu++11
和g++ -std=gnu++0x
,但毫无效果.终端总是读unrecognized command line option
.但是,这样的g++ -std=gnu
事情工作正常(当然C++ 11源代码无法通过).
我应该使用哪个选项来启用C++ 11支持?
顺便说一句,我正在使用的命令行工具安装在Xcode中,我很确定它们是最新的.
在C++ 11中,继承构造函数意味着什么?如果它是我认为的(基类构造函数被带入派生类的范围),它对我的代码有什么影响?这样的功能有哪些应用?
我是C++和Qt的新手,但我非常擅长C#/ Java.
关键是我喜欢跨平台,但我和Qt混淆了.是不是std::vector
已经跨平台了,Qt不提供相当于非跨平台的东西吗?
另外如何File
与QFile
不同?
链接会很好,谢谢:)
我正在尝试开始进行单元测试.我下载了最新版本的gtest,并将其解压缩到A:\gtest
指定的指令中,我打开了gtest.sln.如果我同意更新它,Visual Studio只允许我打开sln.然后,当我尝试构建时,我遇到了一堆错误:
1>------ Build started: Project: gtest, Configuration: Debug Win32 ------
1> gtest-all.cc
1>a:\gtest\include\gtest\gtest-printers.h(550): error C2977: 'std::tuple' : too many template arguments
1> b:\program files (x86)\microsoft visual studio 2012\vc\include\utility(73) : see declaration of 'std::tuple'
1>a:\gtest\include\gtest\gtest-printers.h(558): error C2977: 'std::tuple' : too many template arguments
1> b:\program files (x86)\microsoft visual studio 2012\vc\include\utility(73) : see declaration of 'std::tuple'
1>a:\gtest\include\gtest\internal\gtest-param-util-generated.h(4017): error C2977: 'std::tuple' : too many template arguments
1> b:\program files (x86)\microsoft visual studio 2012\vc\include\utility(73) : see declaration of 'std::tuple'
1> a:\gtest\include\gtest\internal\gtest-param-util-generated.h(4249) …
Run Code Online (Sandbox Code Playgroud) c++ ×10
c++11 ×7
visual-c++ ×2
c++-chrono ×1
c++-faq ×1
c++14 ×1
constructor ×1
future ×1
g++ ×1
googletest ×1
inheritance ×1
macos ×1
mutex ×1
qt ×1
std ×1
terminal ×1
timer ×1
vector ×1