我很清楚在C++中
int someValue = i++;
array[i++] = otherValue;
Run Code Online (Sandbox Code Playgroud)
与...相比有不同的效果
int someValue = ++i;
array[++i] = otherValue;
Run Code Online (Sandbox Code Playgroud)
但每隔一段时间我就会在for循环中看到带有前缀增量的语句,或者仅仅是它们自己的语句:
for( int i = 0; i < count; ++i ) {
//do stuff
}
Run Code Online (Sandbox Code Playgroud)
要么
for( int i = 0; i < count; ) {
//do some stuff;
if( condition ) {
++i;
} else {
i += 4;
}
}
Run Code Online (Sandbox Code Playgroud)
在后两种情况下,++i看起来像是试图生成看起来很聪明的代码.我在监督什么吗?是否有理由使用++i而不是i++后两种情况?
我有很多相当工作的代码已经存在了几个月,今天我看到记录了以下异常:
System.InvalidOperationException
SqlConnection does not support parallel transactions.
at System.Data.SqlClient.SqlInternalConnection.BeginSqlTransaction(
IsolationLevel iso, String transactionName)
at System.Data.SqlClient.SqlConnection.BeginTransaction(
IsolationLevel iso, String transactionName)
at my code here
Run Code Online (Sandbox Code Playgroud)
我想调查为什么会抛出这个异常.我已经阅读了MSDN描述,BeginTransaction()并且它说的很好,有时可以抛出这个异常.
这个例外究竟意味着什么?我应该寻找的代码有什么不足之处?
我不时需要调用new[]内置类型(通常char).结果是一个具有未初始化值的数组,我必须使用memset()或std::fill()初始化元素.
如何进行new[]默认初始化元素?
我有一个简单的代码:
var http = require("http");
var server = http.createServer(function(request, response) {
response.writeHead(200, {"Content-Type" : "text/html"});
response.write("Hello World");
response.end();
});
server.listen(8000);
console.log("Server has started.");
Run Code Online (Sandbox Code Playgroud)
我想将此代码放入server.js.此代码必须是具有许多内部功能的MODULE.我想在其中创建server模块和listen()功能.
我应该把createServer()一个函数放在里面listen().
如果我有index.js我怎么能调用这个模块然后做类似的事情server.listen()?
我有这个代码:
struct data {
void doNothing() {}
};
int main() {
data* ptr = new data();
ptr->~data();
ptr->doNothing();
::operator delete(ptr);
}
Run Code Online (Sandbox Code Playgroud)
请注意,doNothing()在对象被销毁之后但在其内存被释放之前被调用.看起来"对象生命周期"已经结束,但指针仍然指向正确分配的内存.成员函数不访问任何成员变量.
在这种情况下,成员函数调用是否合法?
c++ destructor object-lifetime language-lawyer explicit-destructor-call
我取消程序时出现分段错误.我正在使用gdb进行调试,问题是当我在调试时按Ctrl-C gdb不会取消程序并执行它应该做的就是停止它.
我想要的是执行Ctrl-C并且不允许gdb停止它.有没有办法做到这一点?还有其他调试建议吗?我不能使用printf,因为我真的不清楚问题的来源.
当使用COM时,布尔值将作为VARIANT_BOOL传递,该变量在wtypes.h中声明为short.还有预定义的true和false值:
#define VARIANT_TRUE ((VARIANT_BOOL)-1)
#define VARIANT_FALSE ((VARIANT_BOOL)0)
Run Code Online (Sandbox Code Playgroud)
哪个是从VARIANT_BOOL转换为C++ bool类型的最佳方法?明显的变体是:
与VARIANT_FALSE比较
简单地投奔布尔
其他方式可以很容易地发明.
这是最好的方法 - 最可读,最符合标准,最不容易出现种植错误,最不容易出现移植到64位平台的问题?
使用memcpy()源和目标重叠时可能会导致未定义的行为 - 在这些情况下只能memmove()使用.
但是,如果我确定缓冲区不重叠怎么办?是否有理由专门memcpy()或具体使用memmove()?我应该使用哪个以及为什么?
在阅读C#代码时,我发现了一个相当好奇的片段:
if( whatever is IDisposable) {
(whatever as IDisposable).Dispose();
}
Run Code Online (Sandbox Code Playgroud)
我宁愿期待这样做:
if( whatever is IDisposable) { //check
((IDisposable)whatever).Dispose(); //cast - won't fail
}
Run Code Online (Sandbox Code Playgroud)
或者像这样:
IDisposable whateverDisposable = whatever as IDisposable;
if( whateverDisposable != null ) {
whateverDisposable.Dispose();
}
Run Code Online (Sandbox Code Playgroud)
我的意思as是像演员,但null失败的回报.在第二个片段中,它不会失败(因为is之前有一个检查).
在第一个代码片段中编写代码而不是在第二个或第三个代码中编写代码有什么意义?
许多.NET程序集都附带XML文件.例如,System.Web.WebPages.Razor.dll与之一起System.Web.WebPages.Razor.xml包含以下内容:
<?xml version="1.0" encoding="utf-8" ?>
<doc>
<assembly>
<name>System.Web.WebPages.Razor</name>
</assembly>
<members>
<member name="T:System.Web.WebPages.Razor.PreApplicationStartCode" />
<member name="M:System.Web.WebPages.Razor.PreApplicationStartCode.Start" />
<member name="T:System.Web.WebPages.Razor.RazorBuildProvider" />
<member name="M:System.Web.WebPages.Razor.RazorBuildProvider.#ctor" />
Much more elements follow...
</members>
</doc>
Run Code Online (Sandbox Code Playgroud)
这个XML是什么用的?我是否需要在运行时使用它?
c++ ×5
.net ×3
c# ×2
arrays ×1
boolean ×1
c ×1
casting ×1
com ×1
copy-paste ×1
debugging ×1
destructor ×1
gdb ×1
interop ×1
javascript ×1
memory ×1
node.js ×1
operators ×1
transactions ×1
windows ×1
xml ×1