我看到人们size_t只要意味着无符号整数就会使用.例如:
class Company {
size_t num_employees_;
// ...
};
Run Code Online (Sandbox Code Playgroud)
那是好习惯吗?有一点是你必须包括<cstddef>.应该是unsigned int吗?甚至只是int?
只是使用int对我有吸引力的声音,因为它避免了像这样的愚蠢错误(因为人们经常使用int):
for(int i = num_employees_ - 1; i >= 0; --i) {
// do something with employee_[i]
}
Run Code Online (Sandbox Code Playgroud) 在Visual Studio 2005中,我进入了:
查看 - >属性页 - > C/C++ - >代码生成 - >启用增强指令集
但在Visual Studio 2008中?
提前致谢
从Chromium的源代码中的StringPiece类的文档:
// A string-like object that points to a sized piece of memory.
//
// Functions or methods may use const StringPiece& parameters to accept either
// a "const char*" or a "string" value that will be implicitly converted to
// a StringPiece.
//
// Systematic usage of StringPiece is encouraged as it will reduce unnecessary
// conversions from "const char*" to "string" and back again.
Run Code Online (Sandbox Code Playgroud)
使用示例:
void foo(StringPiece const & str) // Pass by ref. …Run Code Online (Sandbox Code Playgroud) 我一直是C#和.Net开发人员,并一直在玩学习c ++的想法.
我一直在考虑这个问题的一个主要原因是,使用.Net框架的应用程序可以比C++快多少.但我是否正确地假设如果我在Visual Studio中编写C++应用程序,和/或在C++应用程序中引用.Net库,C++在MSIL中转换(就像C#一样) - 因此我放弃了任何好处来自编码吗?
所以我的问题是这样的:应用程序的C++组件是引用.Net程序集以"传统"方式编译,还是编译成MSIL?
我有一个System.Timers.Timer,它每隔3秒递增一次计数器.另一个线程也可以在某些条件下将此变量设置为任何值.
试图使用Interlocked.Increment,但它没有UInt16的重载.接下来要考虑的是锁定,但我不确定如何对此变量进行线程安全访问(读/写/增量).
编辑:代码最初使用int,但根据建议更改为UInt16
private volatile System.UInt16 mCounter = 0;
private readonly object mCounterLock = new object();
public System.UInt16 Counter {
get {
lock (mCounterLock) {
return mCounter;
}
}
set {
lock (mCounterLock) {
mCounter = value;
}
}
}
private System.Timers.Timer mCounterTimer;
void mCounter_Elapsed(object sender, System.Timers.ElapsedEventArgs e) {
lock (mCounterLock) {
Counter++;
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个git repo,我需要在没有冲突的情况下工作.它是.net/c#mvc repo.问题是dll和pdb文件.这些文件意外地被提交到了repo,所以当我做我的初始时git pull,我得到了另一个开发人员提交的所有这些文件.
我设置了.gitignore这样的:
bin/
obj/
App_data/
Run Code Online (Sandbox Code Playgroud)
从其他帖子我相信这是我应该做的全部,但是,如果我构建我的项目并运行git status它会显示许多将要提交的dll和pdb文件.
这是因为当克隆它时,那些文件存在于repo中吗?如果是这样,删除这些文件的最佳方法是什么?
我遇到了一些问题,将一些代码移植到MSVC,这让我很困惑.据我所知,代码应该是合法的,Clang编译它就好了.
我把它缩小到以下几点:
enum E {
x
};
template <typename T>
struct traits {
static const E val = x;
};
template <E e>
struct S {
S(){};
};
template <typename T>
S<traits<T>::val> foo(T t);
int main() {
char c = 0;
foo(c);
}
Run Code Online (Sandbox Code Playgroud)
请注意,在编译之后,代码会产生链接器错误(我删除了函数的定义foo以保持样本最小),但据我所知它应该干净地编译.
但是,MSVC给了我这个错误:
错误C2893:无法专门化函数模板'S :: val> foo(T)'
所以我的问题:
我在VC++ 2010和2012上重现了这个问题.
模板元编程是否比同等的C代码更快?(我说的是运行时性能):)
我使用.NET DateTime来获取当前日期和时间.我正在将其转换为字符串,以用作文件名的一部分.问题是保存图像的OpenCV命令需要char*而不是字符串类型,而DateTime只输出String ^类型.我该如何工作?继承人未完成的代码
String^ nowString = DateTime::Now.ToString("yyyy-MM-dd-HH:mm");
IplImage* toSave;
CvCapture* capture = cvCreateCameraCapture(0);
toSave = cvQueryFrame( capture );
cvSaveImage(nowString, toSave);
cvReleaseImage(&toSave);
cvReleaseCapture(&capture);
Run Code Online (Sandbox Code Playgroud) 我们有一个相当大的,太混乱的代码库,我们希望使用Git迁移.目前,它是一个巨大的单片块,不能轻易拆分成更小的独立组件.该代码构建了大量的共享库,但它们的源代码是交错的,目前无法将其干净地分成单独的存储库.
我不太关心Git是否可以处理将所有代码放在单个存储库中,但问题是我们需要对源代码和从它构建的许多库进行版本控制.从头开始构建所有内容需要数小时,因此在检查代码时,开发人员还应该获得这些库的预编译版本以节省时间.
这是我可以使用一些建议的地方.这些库不需要100%更新(因为它们通常保持二进制兼容性,并且必要时可以由个别开发人员重建),所以我正在寻找方法来避免混乱我们的源代码库有无数不同版本的二进制文件,无论如何都可以从源重新生成,同时仍然使开发人员可以轻松访问库,因此他们不必从头开始重建所有内容.
所以我想要一些方法来实现类似以下的东西.
git commit -a不应该最终意外地使用所有这些生成的文件的新修订版来污染存储库)当然,与此同时,使用它们的过程应尽可能顺利.在检查源代码时,从它构建的库应遵循(或至少很容易获得).提交时,不应该意外地提交这些库的新版本,只是因为它们被重新编译并且现在嵌入了不同的时间戳.
我一直在寻找使用git 子模块的选项,创建包含源代码的"超级"存储库,然后创建生成库的一个或多个子模块,但到目前为止,它似乎有点过于笨拙和脆弱我的口味.看起来它们实际上并没有阻止开发人员直接对子模块进行更改,它只会导致事情进一步突破(在使用子模块时,我最终得到了detached HEAD比我更重要的s) .
考虑到几乎所有的开发人员都是Git的新手,最终可能会浪费更多时间而不是拯救我们.
那么我们有什么选择呢?那个子模块对你来说听起来很合理Git guru吗?我如何"驯服"它,所以它对我们的开发人员来说尽可能容易使用(并且很难搞乱)?
或者我们没有考虑过完全不同的解决方案?
我应该提一下,我只使用了Git几天,所以我自己就是一个新手.