小编Zac*_*Zac的帖子

C++ 0x lambda按值捕获总是const?

有没有办法按值捕获,并使捕获的值非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)

c++ lambda const c++11

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

LNK1201 Visual C++ 2010大型项目无法生成PDB

我们已经在MSDN WRT上列出了这个错误(#5除外).不同机器上的三个不同的人正在遇到同样的问题.PDB已创建,但在中间某处失败.

细节:

  • 67个静态库
  • 4.27 GB的静态库
  • 1048575字节 - 链接器失败时PDB的大小
  • 最后几兆字节的PDB为空(零)
  • 发布版本成功并生成PDB(我们打开它,在exe中没有调试信息)
  • 发布版本PDB略低于1 GB.

我们已禁用病毒扫描程序.使用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.

c++ linker visual-studio-2010 visual-c++ pdb-files

16
推荐指数
2
解决办法
2422
查看次数

在前向声明类型未定义的行为上使用typeid?

我是否正确读取标准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'

c++ standards c++11

10
推荐指数
2
解决办法
1917
查看次数

查找boost :: shared_ptr循环引用

有没有找到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)

c++ boost memory-leaks shared-ptr

9
推荐指数
2
解决办法
2475
查看次数

当初始化程序是引用时,为什么auto不是引用?

我试图理解为什么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( &not_a_ref != &stuff )
        std::cout << "definately not a reference" << std::endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ standards c++11

9
推荐指数
1
解决办法
197
查看次数

使用std算法将容器分区/批处理/块化为相同大小的块

我遇到了一种情况,我必须将一组记录批处理到数据库.我想知道如何使用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)

c++ boost stl c++11

7
推荐指数
2
解决办法
3923
查看次数

在Release - Compiler/clr bug中没有初始化静态成员变量?

预期的输出和输出我进入调试模式,并在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的需要放入静态构造函数.

c# clr .net-4.0

6
推荐指数
2
解决办法
3332
查看次数

HTML编码&deg; 度数符号额外空间

  1. <div id="a">°F</div>
  2. $.get("http://blah.com/go",{'TU':$('#a').text()});
  3. IIS服务器日志显示以下参数:
    99.5%的时间:TU =%C2%B0F
    0.5%的时间:TU =%C2%B0 + F
  4. 服务器随后崩溃,因为它不知道'°F'是什么.不可否认的一个缺点是我们正在从DOM中删除文本并将其发送到我们的服务器.这是我怀疑问题的地方,但我想了解更多.

其他信息:0.5%的时间都是IE8和Chrome.所有知识产权都地理定位到哥伦比亚,这看起来像是一个本地问题,但我们无法复制它.

想法?

html javascript encoding localization internationalization

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

Qt Moc在msbuild下并行处理多个文件

使用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)

msbuild qt visual-studio-2010 moc

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

为什么Random.Next()返回int而不是uint?

根据MSDN docs,该方法Random.Next() 返回一个非负的随机数.为什么它会返回int而不是uint

似乎返回一个均匀分布在所用类型范围内的值将是最有意义的.从使用角度来看 - 如果您使用int它应该涵盖范围int,如果您使用uint它也应该返回类型的均匀分布.这不是使用类型的重点吗?

.net c# random

4
推荐指数
1
解决办法
923
查看次数