那些日子我一直在阅读很多reinterpret_cast<>关于应该如何使用它(并且在大多数情况下避免使用它).
虽然我知道,使用reinterpret_cast<>从投,说unsigned char*来char*是实现定义(因此非便携式),这似乎是没有别的办法了有效转换一个到另一个.
假设我使用一个unsigned char*处理某些计算的库.Internaly,我已经char*用来存储我的数据(我不能改变它,因为如果我这样做会杀死小狗).
我会做的事情如下:
char* mydata = getMyDataSomewhere();
size_t mydatalen = getMyDataLength();
// We use it here
// processData() takes a unsigned char*
void processData(reinterpret_cast<unsigned char*>(mydata), mydatalen);
// I could have done this:
void processData((unsigned char*)mydata, mydatalen);
// But it would have resulted in a similar call I guess ?
Run Code Online (Sandbox Code Playgroud)
如果我希望我的代码具有高度可移植性,那么我似乎别无选择,只能先复制数据.就像是:
char* mydata = getMyDataSomewhere();
size_t mydatalen = getMyDataLength();
unsigned …Run Code Online (Sandbox Code Playgroud) 我正在尝试运行我的make文件但是我收到以下两个错误:
make:c:找不到命令
和
make:o:找不到命令
我试图在cygwin中做这个.我有g ++并在其上安装,但是当我运行make文件时,我收到了这些错误.
有任何想法吗?
makefile:
all: MergeSort clean
MergeSort: main.o MergeSort.o
$g++ -o MergeSort main.o MergeSort.o
main.o: main.cpp MergeSort.h
$g++ -c main.cpp
MergeSort.o: MergeSort.cpp MergeSort.h
$g++ -c MergeSort.cpp
clean:
rm -rf *o
cleanall:
rm -rf *o *exe
Run Code Online (Sandbox Code Playgroud) 我在使用这个C++代码时遇到了麻烦.整数num是一个我要检查它是否为素数的数字.但是这个程序总是返回false.它可能很简单但我找不到任何东西.
for(int i=2;i<num;i++){ //primes are allowed to be divided by 1 so we start at 2
if(num % i == 0){ //can be divided by a number other than itself or 1 so we trip out
return false;
} else if(i == num){ //if we've already done checks as high as possible and not tripped out yet then report success
return true;
}
}
Run Code Online (Sandbox Code Playgroud) 鉴于这两个平均函数的实现:
float average(const vector<float>& seq)
{
float sum = 0.0f;
for (auto&& value : seq)
{
sum += value;
}
return sum / seq.size();
}
Run Code Online (Sandbox Code Playgroud)
和:
float average(const vector<float>& seq)
{
float avg = 0.0f;
for (auto&& value : seq)
{
avg += value / seq.size();
}
return avg;
}
Run Code Online (Sandbox Code Playgroud)
为了说明我的问题,想象一下我们在输入数据上有很大的不同,如下所示:
1.0f, 0.0f, 0.0f, 0.0f, 1000000.0f
Run Code Online (Sandbox Code Playgroud)
我的猜测是,在第一个实现中,sum可以增长"太多"并且松散最低有效数字而1000000.0f不是1000001.0f在求和循环结束时.
另一方面,由于要执行的分割数量,第二个实现似乎在理论上效率较低(我没有描述任何内容,这是一个盲目的猜测).
那么,这些实现中的一个是否优于另一个?我是否认为第一次实施不太准确?