小编Mav*_*nav的帖子

将'int'强制转换为'size_t'

size_t和int之间的区别是有据可查的,我概括了一下:前者是某些无符号整数类型的别名,它是依赖于实现的,而后者是有符号的; 前者适用于内存声明,而后者适用于算术运算.

我的问题是,如果我做一些算术计算来给int(它永远不会太大而且总是正的)并将它分配给size_t变量(用于访问数组位置),是否存在任何可能出现问题的情况出现?

c++ int casting size-t

0
推荐指数
1
解决办法
4695
查看次数

Abs和使用命名空间std

假设我正在使用using namespace std(不可否认的不良做法)并且我abs在我的代码中使用该函数(以获得重载的绝对函数).具体来说,我的MWE是:

#include <cmath>
#include <iostream>
#include <stdlib.h>

using namespace std; 

int main(int argc, char* argv[]) {

 double f(-0.4);
 std::cout<<"abs(f) = "<<abs(f)<<std::endl;

}
Run Code Online (Sandbox Code Playgroud)

如果我注释掉该using namespace std;行,则输出为

abs(f) = 0
Run Code Online (Sandbox Code Playgroud)

否则输出是

abs(f) = 0.4
Run Code Online (Sandbox Code Playgroud)

我不明白的是,在后一种情况下如何调用"正确的"abs函数,因为即使stdlib.h有一个abs只返回int's'的函数.

事实上,这个问题的第二个答案是使用using namespace std;可能还不够.这是真的?我的MWE似乎与此相矛盾.

我在Linux上使用gcc-4.8,这可能是解决依赖关系最有问题的组合.

c++ namespaces std absolute-value

0
推荐指数
1
解决办法
769
查看次数

主要和函数之间的C++隐式转换

我有以下简单的程序:

#include <iostream>
#include <stdio.h>

void SomeFunction(int a)
{
  std::cout<<"Value in function: a = "<<a<<std::endl;
}

int main(){

  size_t a(0);

  std::cout<<"Value in main: "<<a-1<<std::endl;
  SomeFunction(a-1);

  return 0;

}
Run Code Online (Sandbox Code Playgroud)

执行此操作后,我得到:

主要价值:18446744073709551615

函数值:a = -1

我想我大致理解为什么函数获得-1的'正确'值:存在从无符号类型到有符号类型的隐式转换,即18446744073709551615(无符号)= -1(有符号).

是否存在函数无法获得"正确"值的情况?

c++ type-conversion implicit-conversion

-2
推荐指数
1
解决办法
83
查看次数