小编For*_*ing的帖子

从std :: vector中删除前N个元素

我似乎无法想到一个可靠的方法(也压缩内存)从std :: vector中删除前N个元素.怎么会这样做呢?

c++ stdvector

24
推荐指数
3
解决办法
3万
查看次数

在C++ 11中"删除"复制ctor/assignment

在VS 2010 SP1中,以下内容:

class Foo
{
public:
    Foo() { }
    Foo(Foo const&) = delete; // Line 365
    Foo& operator=(Foo const&) = delete; // Line 366
};
Run Code Online (Sandbox Code Playgroud)

不编译.它抱怨说:

CPPConsole.cpp(365):错误C2059:语法错误:';'
CPPConsole.cpp(365):错误C2238:';'之前的意外标记
CPPConsole.cpp(366):错误C2059:语法错误:';'
CPPConsole.cpp(366):错误C2238:';'之前的意外令牌

这不支持吗?奇怪的是,Intellisense似乎认识到这种结构.它说"IntelliSense:function"Foo :: operator =(const Foo&)"(在第366行声明)无法引用 - 它是一个已删除的函数"

我错过了什么?

copy-constructor assignment-operator c++11

14
推荐指数
1
解决办法
1万
查看次数

使用GoogleTest验证异常消息

是否可以验证异常抛出的消息?目前可以做到:

ASSERT_THROW(statement, exception_type)
Run Code Online (Sandbox Code Playgroud)

这一切都很好,但没有,我在哪里可以找到一种方法来测试e.what()是我真正想要的.这是不是可以通过谷歌测试?

c++ exception-handling googletest

8
推荐指数
1
解决办法
4288
查看次数

Sqlite的序列化模式

在这里的文档:http: //www.sqlite.org/threadsafe.html

对于序列化模式,它说:"在序列化模式下,SQLite可以被多个线程安全地使用,没有任何限制."

我想确保我理解那里提供的保证.如果使用"SQLITE_OPEN_FULLMUTEX"标志打开单个数据库连接,并且两个线程同时尝试在同一时刻调用sqlite3_exec,Sqlite会自动序列化调用吗?

sqlite thread-safety

7
推荐指数
1
解决办法
3237
查看次数

std :: getline on std :: cin

有什么好的理由可以解释:

std::string input;
std::getline(std::cin, input);
Run Code Online (Sandbox Code Playgroud)

getline调用不会等待用户输入?cin的状态是否以某种方式搞砸了?

c++ cin getline

6
推荐指数
1
解决办法
2695
查看次数

Visual Studio属性表中的Platform Toolset属性

<PlatformToolset/>物业不会通过项目属性表公开.这很不幸,因为如果要升级编译器(在我的情况下为VS 2013),我必须通过几个解决方案来运行几个解决方案来改变这个值.

我可以编写一个脚本或一个小程序,可以打开vcxproj文件,将它们视为xml并在所有战略位置插入此属性,但这对我来说似乎有点疯狂.

这里推荐的方法是什么?

propertysheet visual-c++ envdte visual-studio-2013

6
推荐指数
1
解决办法
909
查看次数

用于 COMDAT 折叠的 MSVC 编译器和链接器选项之间的关系

这个问题在 SO 上有一些答案,但我的略有不同。在标记为重复之前,请试一试。

MSVC 一直提供 /Gy编译器选项,以允许将相同的函数折叠到 COMDAT 部分中。同时,链接器还提供了 /OPT:ICF 选项。我的理解是这两个选项必须结合使用吗?也就是说,前者将函数封装到 COMDAT 中,后者消除了冗余的 COMDAT。那是对的吗?

如果是,那么我们要么同时使用要么都关闭?

compiler-construction linker visual-c++ comdat-folding

5
推荐指数
1
解决办法
581
查看次数

使用Windbg进行关键部分挂起分析

当我的应用程序暂时没有响应时,我最近得到了一个通过procdump生成的转储文件.

当我运行!锁定转储文件时,我得到一个单独的条目,如下所示:

0:000> !locks

CritSec +123456 at 00123456
WaiterWoken       No
LockCount         0
RecursionCount    2
OwningThread      aaaa
EntryCount        0
ContentionCount   0
*** Locked
Run Code Online (Sandbox Code Playgroud)

就是那一个上市.就这样.当我进一步深入研究:

0:000> dt RTL_CRITICAL_SECTION 00123456
MyModule!RTL_CRITICAL_SECTION
  +0x000 DebugInfo      : 0x00aabbcc _RTL_CRITICAL_SECTION_DEBUG
  +0x004 LockCount      : 0n-2
  +0x008 RecursionCount : 0n2
  +0x00c OwningThread   : 0x0000aaaa Void
  +0x010 LockSemaphore  : (null)
  +0x014 SpinCount      : 0
Run Code Online (Sandbox Code Playgroud)

问题:

1)我应该采取MyModule!RTL_CRITICAL_SECTION明确的线索,这个关键部分可能是在MyModule中定义的吗?

2)有没有办法让Windbg显示这个关键部分的实际变量名?(即假设#1为真,这是应用程序代码已定义/访问的CS.)

3)为什么上述列表中的LockCount值彼此不一致?(一个有0而另一个有-2.)

4)我认为我很了解LockCount,知道它不能低于-1.更不用说RecursionCount似乎与LockCount严重失调.

我想最重要的问题是我应该把这个搞砸到腐败的CS吗?

c++ windbg critical-section

3
推荐指数
1
解决办法
1769
查看次数

Julian Day在SQLite中的ISO 8601字符串

我有一个表,它将日期/时间值存储为SQLite中的julian天(使用julianday()函数).我似乎无法弄清楚如何将它们转换回ISO 8601个风格的字符串(YYYY-MM-DDTHH:M:SS.SSS),当我读?

sqlite iso8601 julian-date

2
推荐指数
1
解决办法
4794
查看次数

VS2017和VS2015之间的二进制兼容性

这个帖子: Visual-C++ - 2017二进制兼容VC++ - 2015?清楚地说,VS 2017与VS 2015是二进制兼容的.它甚至看起来像官方立场.

我的问题是,在过去,我清楚地记得每当我尝试将使用不同版本的MSVC编译的静态库链接到EXE中时,遇到链接器错误(我不记得具体的错误集)使用较新版本的MSVC构建.

然而,二进制(in)兼容性听起来像是在运行时会在你脸上爆炸的东西,而不是链接时间.

有人能告诉我,以前版本的MSVC是否确实生成了版本不匹配的链接器错误?这是如何完成的?

编辑

这如何影响打开WPO/LTCG时构建的静态库?我相信这些产生了中间目标文件(而不是COFF),并且Microsoft不保证这些中间文件的格式在不同版本的编译器中保持停滞.

abi binary-compatibility visual-c++-2015 visual-c++-2017

2
推荐指数
1
解决办法
1712
查看次数