何时应该在C++中使用BOOL和bool?为什么?
我认为使用bool更清洁,更便携,因为它是内置类型.但是当你使用遗留代码/ C代码进行交互,或者使用C代码/ Windows API从.NET进行交互操作时,BOOL是不可避免的.
所以我的政策是:在C++中使用bool.与外界交谈时使用BOOL,例如windows DLL中的导出功能.
关于何时使用一个而不是另一个,是否有明确的解释?
我的环境是64位win7,VC2010.
当然,intel里面是64位CPU.
我可以在32位应用程序中使用64位指令/本机机器字(64位)吗?由于我的大多数代码都是32位,我不想将其移植到64位.
对于一些性能关键的热代码,我想通过编译器内部或内联汇编手动优化它(也是64位VC编译器不支持内联汇编),是否可以运行64位代码fox示例mov rax,rbx in a 32位模式应用?
对于正则表达式\ w +\d,在许多脚本语言中,例如perl/python,它可以按字面编写.但是在C/C++中,我必须把它写成:
const char *re_str = "\\w+\\d";
Run Code Online (Sandbox Code Playgroud)
这是丑陋的眼睛.
有什么办法可以避免吗?MACRO也可以接受.
声明:我使用vs 2010/vs 2013,并使用预先构建的二进制文件3.4.
我在生产代码中发现了一个错误.我将重现代码最小化为以下内容:
#include <windows.h>
#include <process.h>
#include <stdio.h>
using namespace std;
bool s_begin_init = false;
bool s_init_done = false;
void thread_proc(void * arg)
{
DWORD tid = GetCurrentThreadId();
printf("Begin Thread %2d, TID=%u\n", reinterpret_cast<int>(arg), tid);
if (!s_begin_init)
{
s_begin_init = true;
Sleep(20);
s_init_done = true;
}
else
{
while(!s_init_done) { ; }
}
printf("End Thread %2d, TID=%u\n", reinterpret_cast<int>(arg), tid);
}
int main(int argc, char *argv[])
{
argc = argc ; argv = argv ;
for(int i = 0; i …
Run Code Online (Sandbox Code Playgroud) 在C中,给出
char arr [10];
uint32_t i = -1;
char * p = &arr [1];
Run Code Online (Sandbox Code Playgroud)
(p + i)溢出/未定义或等于&arr [0]?为什么C标准(6.5.6.8)中的指针算术规则如此令人困惑?
语言定义指针可以做+, - ,+ =, - =任何整数类型的操作,当指针添加负int值时会发生什么?如果指针的表示是4个字节但整数操作数是int64_t怎么办?
根据我的理解,C99标准在数组索引术语(6.5.6.8)中定义指针算法,它指出:
char * ptr = …;
char * new_ptr = ptr + int_expr;
assert( (new_ptr - ptr) == (int_expr) );
Run Code Online (Sandbox Code Playgroud)
什么是模糊,间接定义的原因?