有没有办法按值捕获,并使捕获的值非const?我有一个库函子,我想捕获并调用一个非常量但应该是的方法.
以下不编译,但使foo :: operator()const修复它.
struct foo
{
bool operator () ( const bool & a )
{
return a;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
foo afoo;
auto bar = [=] () -> bool
{
afoo(true);
};
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我们已经在MSDN WRT上列出了这个错误(#5除外).不同机器上的三个不同的人正在遇到同样的问题.PDB已创建,但在中间某处失败.
细节:
我们已禁用病毒扫描程序.使用procmon.exe观察并且在链接器失败时没有看到与PDB的交互.
相关问题表明PDB的约1 GB限制 - 任何人/方式确认这一点?
更新和解决方案:
@Barry和铬团队提出了解决方案. 以下是实现解决方案的Chromium构建系统的补丁.
详细信息
PDB在内部使用虚拟文件系统:MSF.当链接器创建PDB文件时,它默认为(明显不可配置的)2 kB页面大小.显然并且幸运的是,当编译器创建其PDB时,它默认页面大小为4 kB.可以提升该编译器PDB并将其用作链接器PDB的基础.
更好的解决方案 作为链接exe或dll的项目上的预链接事件,我们可以提升编译器以生成我们所需的初始PDB:
cl -c "dummy_empty.cpp" /Zi /Fd"$(TargetDir)$(TargetName).pdb"
Run Code Online (Sandbox Code Playgroud)
原始解决方案
使用空cpp文件创建C++静态库项目,配置'Porgram数据库文件名'以输出除默认值之外的其他内容.使用一些项目构建事件(我使用'Pre-Link Event')将先前创建的PDB复制到链接器期望的任何位置(请参阅链接器 - >生成程序数据库文件)以创建其PDB.幸运的是,链接器将采用在PDB中复制并使用其4 kB页面大小.这将花费一些时间,一些空间允许高达2GB的PDB.
我是否正确读取标准5.2.8.3: ... If the type of the
expression is a class type, the class shall be completely-defined. 如果类型不是"完全定义",那是否意味着以下程序未定义?
Foo.cpp中:
struct foo
{
virtual void a(){}
};
struct bar : foo
{
virtual void a(){}
};
bar abar;
foo& get_some_foo()
{
return abar;
}
Run Code Online (Sandbox Code Playgroud)
main.cpp中:
#include <iostream>
#include <typeinfo>
struct foo;
foo& get_some_foo();
int main()
{
foo& a_ref_foo(get_some_foo());
std::cout << "a_ref_foo typeid name: " << typeid(a_ref_foo).name() << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
MSVC10输出:`a_ref_foo typeid name:struct foo'
有没有找到shared_ptr的循环引用的提示/技巧?
这是我想要找到的例子 - 不幸的是我似乎无法在我的代码中找到循环.
struct A
{
boost::shared_ptr<C> anC;
};
struct B
{
boost::shared_ptr<A> anA;
};
struct C
{
boost::shared_ptr<B> anB;
};
Run Code Online (Sandbox Code Playgroud) 我试图理解为什么not_a_ref不是参考.我明白我可以把它作为参考auto &.我在标准中挖了一段时间,但迷路了,无法弄清楚这种行为的定义.
例:
#include <vector>
#include <iostream>
#include <type_traits>
std::vector<int> stuff;
std::vector<int>& get_stuff()
{
return stuff;
}
int main()
{
auto not_a_ref = get_stuff();
if( std::is_reference<decltype(not_a_ref)>::value )
std::cout << "is_reference true" << std::endl;
else
std::cout << "is_reference false" << std::endl;
if( ¬_a_ref != &stuff )
std::cout << "definately not a reference" << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我遇到了一种情况,我必须将一组记录批处理到数据库.我想知道如何使用std算法实现这一目标.
给定10002条记录,我希望将其分成100个记录的区间进行处理,其余为2的区间.
希望以下代码能够更好地说明我正在努力实现的目标.我对完全开放的解决方案涉及迭代器,lambdas任何类型的现代C++乐趣.
#include <cassert>
#include <vector>
#include <algorithm>
template< typename T >
std::vector< std::vector< T > > chunk( std::vector<T> const& container, size_t chunk_size )
{
return std::vector< std::vector< T > >();
}
int main()
{
int i = 0;
const size_t test_size = 11;
std::vector<int> container(test_size);
std::generate_n( std::begin(container), test_size, [&i](){ return ++i; } );
auto chunks = chunk( container, 3 );
assert( chunks.size() == 4 && "should be four chunks" );
assert( chunks[0].size() == 3 && "first …Run Code Online (Sandbox Code Playgroud) 预期的输出和输出我进入调试模式,并在VS2010,.NET 4.0下发布模式:
bar construct
main
Run Code Online (Sandbox Code Playgroud)
输出在释放模式没有在VS2010的调试器,并且在WinDbg的:
main
Run Code Online (Sandbox Code Playgroud)
程序在VS2005,.NET 2.0上不会出现此行为
using System;
namespace static_init
{
public class bar
{
public bar()
{
Console.WriteLine("bar construct");
}
}
class Program
{
public static bar blah = new bar();
static void Main(string[] args)
{
Console.WriteLine("main");
Console.ReadLine();
}
}
}
Run Code Online (Sandbox Code Playgroud)
可能相关: 静态构造函数可以在非静态构造函数之后运行.这是编译器错误吗?
更新
在我的实际代码构造bar()函数中使用C++(非托管)初始化一些互操作代码.它需要在此库中的任何其他内容之前发生 - 是否有任何方法可以确保在没有放入init()触及库中所有静态(具有未外部引用的副作用)的函数的情况下?
未来搜索者的注意事项:我正在使用SWIG,这是他们在包装器生成代码中做出的假设. SWIGStringHelper是目前的罪犯,可能会有更多.
结论
更新到SWIG的2.0版本,它根据新版.NET的需要放入静态构造函数.
<div id="a">°F</div> $.get("http://blah.com/go",{'TU':$('#a').text()}); 其他信息:0.5%的时间都是IE8和Chrome.所有知识产权都地理定位到哥伦比亚,这看起来像是一个本地问题,但我们无法复制它.
想法?
使用Qt Visual Studio插件,它似乎以一种似乎看不见的方式处理了几乎所有事情。不幸的是,它使用msbuild中的CustomBuild步骤进行移动。这导致了一个接一个的串行移动。有没有办法说服msbuild并行执行它们-我已经厌倦了像我一样坐在它们的桂冠上的7个核心。
我已经看过msbuild的BuildInParallel,但是我不确定如何在这里应用它。
msbuild片段:
<Project>
...
<ItemGroup>
<CustomBuild Include="a_class4.h">
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Moc%27ing %(Identity)...</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_CORE_LIB -DQT_GUI_LIB "-I." "-I.\GeneratedFiles" "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\qtmain" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I." "-I." "-I." "-I."</Command>
</CustomBuild>
<CustomBuild Include="a_class3.h">
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Moc%27ing %(Identity)...</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_CORE_LIB -DQT_GUI_LIB "-I." "-I.\GeneratedFiles" "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\qtmain" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I." "-I." "-I." "-I."</Command>
</CustomBuild>
</ItemGroup>
...
</Project>
Run Code Online (Sandbox Code Playgroud) 根据MSDN docs,该方法Random.Next() 返回一个非负的随机数.为什么它会返回int而不是uint?
似乎返回一个均匀分布在所用类型范围内的值将是最有意义的.从使用角度来看 - 如果您使用int它应该涵盖范围int,如果您使用uint它也应该返回类型的均匀分布.这不是使用类型的重点吗?
c++ ×6
c++11 ×4
boost ×2
c# ×2
standards ×2
.net ×1
.net-4.0 ×1
clr ×1
const ×1
encoding ×1
html ×1
javascript ×1
lambda ×1
linker ×1
localization ×1
memory-leaks ×1
moc ×1
msbuild ×1
pdb-files ×1
qt ×1
random ×1
shared-ptr ×1
stl ×1
visual-c++ ×1