标签: implicit-conversion

显式转换有多少级别?

代码片段#1

int n = 46341;
long long value = ((long long) (n * (n + 1))) / 2;
std::cout << value; // -1073716337 -- WRONG!
Run Code Online (Sandbox Code Playgroud)

代码片段#2

int n = 46341;
long long value = (long long)((long long)((long long)n * ((long long)n + 1))) / 2;
std::cout << value; // 1073767311 -- CORRECT!
Run Code Online (Sandbox Code Playgroud)

需要多少级显式转换才能产生所需的结果?

c++ casting literals implicit-conversion

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

超出范围时转换为有符号类型行为

当源值无法在目标类型中表示时,根据cppreference将整数转换为有符号类型

  • 实现定义(C++20 之前)
  • 目标类型的唯一值等于源值模 2^n ,其中 n 是用于表示目标类型的位数 (C++20 起)

GCC实现定义的行为中还指定了

为了转换为宽度为 N 的类型,该值会以 2^N 为模减少到该类型的范围内;没有发出任何信号。

我猜也有人说同样的话。我的问题是减少/模数结果是否仍然可能超出目标签名类型的范围?比如说signed char c = 255,255 模 2^8 仍然是 255,没有变化。这个模数结果如何适合目标类型?

这个答案展示了一种方法,首先将值反转并加 1,然后在前面添加一个有符号位。我不确定这是否是实际所做的。

解释强调部分的正确/标准方法是什么?

c++ implicit-conversion c++20 implementation-defined-behavior

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

定义二维数组:int *arr[ ] 和 int arr[ ][ ] 就它们在内存中的表示方式而言有什么区别?

我一直在尝试理解这两个定义之间的区别以及如何正确使用它们。
在我看来,定义一个二维数组将arr[length][width]矩阵的内容一行一行地连续存储在内存中(矩阵本质上是一大行),这样您就可以用这种方式访问​​ i,j 坐标中的数字*(arr+width*i+j): 。当将其发送到函数时,可以进行声明,func(int *arr)并且由于二维数组在内存中的表示方式,您访问矩阵内容不会有问题。

而将数组定义为似乎int *arr[];并没有以相同的线性、连续的方式将矩阵的内容存储在内存中。函数的声明必须是func(int **arr) or (int *arr[])。虽然您仍然可以通过坐标 i, j 访问矩阵,如下所示:arr[i][j],但似乎不可能这样做:*(arr+width*i+j)。我的想法是否正确,因为以这种方式定义二维矩阵不会将矩阵的行连续存储在内存中,还是我遗漏了一些东西?

c pointers multidimensional-array implicit-conversion function-declaration

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

-1 的 AND 运算

在代码中实现逻辑运算时,发现一个现象,不应该在if语句中输入。原来这是AND (&&)-1和自然数的运算。

我不知道为什么在下面的相同代码中打印值 1。我直接运行1的补码和2的补码等计算,但没有得出1。

#include <iostream>

using namespace std;

int main()
{
    int a = 10;
    int b = -1;
    
    int c = a && b;
    
    printf("test = %d",c);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ boolean implicit-conversion type-promotion logical-and

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

什么是“int (**p)[2];”?

问题是这样的:

#include <stdio.h>

int main()
{
    int a[2][2] = { {6, 2}, {3, 4} };
    
    int (**p)[2];
    p = a;
    
    for (int i = 0; i < 4; i++) {
        printf("%p\n", (*p + i));
        printf("%d\n", *(*p + i));
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我将其解释int(**p)[2];为一个指向大小为 2 的一维数组的双指针。

我得出这个结论是因为:

  1. int *p[2];表示大小为 2 的整数指针数组。
  2. int (*p)[2];表示指向大小为 2 的一维数组的整数指针。

所以,

  1. int **p[2];表示大小为 2 的整数双指针数组。
  2. int (**p)[2];表示指向大小为 2 的一维数组的整型双指针。

1、2、3 和 4 项陈述中哪些是正确的,哪些需要更正?

因此,这段代码的输出是什么?

在这里尝试过。

c arrays pointers for-loop implicit-conversion

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

bool foo = true 和 bool foo = 1 有什么区别吗?

bool在C++中,将a赋值给true和将其赋值给1(或任何非零整数)之间有什么区别吗?

我见过许多有竞争力的程序员甚至在提前编写代码的情况1下都使用true而不是,所以我想知道除了打字速度更快之外是否还有任何好处。

c++ integer boolean literals implicit-conversion

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

隐式类型变量

可能重复:
在C#中使用var关键字

对于C#来说比较新,我想知道MS必须引入var隐式类型变量的动机.文件说:

隐式类型的局部变量是强类型的,就像您自己声明了类型一样,但编译器确定了类型.

进一步说:

在许多情况下,var的使用是可选的,只是语法上的便利

这一切都很好,但在我看来,这只会引起混乱.

假设你正在审查这个for循环.

foreach (var item in custQuery){
    // A bench of code...
}
Run Code Online (Sandbox Code Playgroud)

而不是审查循环的内容和语义,我会花费宝贵的时间来寻找项目的类型!我宁愿选择以下内容:

foreach (String item in custQuery){
    // A bench of code...
}
Run Code Online (Sandbox Code Playgroud)

问题是:我读到隐式类型变量在处理LINQ时有帮助,是否真的有助于在其他场景中使用它?

c# var implicit-conversion

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

隐含关键字

public static implicit operator byte(BytesType o) { return ConvertTo<byte>(o); }
Run Code Online (Sandbox Code Playgroud)

以上是从类型的对象o隐式转换BytesTypebyte.

但是以下是做什么的

public static implicit operator byte?(BytesType o) { return ConvertTo<byte>(o); }
Run Code Online (Sandbox Code Playgroud)

特别是条件运算符.条件运算符表示什么?

提前致谢.

c# implicit-conversion

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

为什么我通过乘以两个短整数得到一个负数?

我有一个作业,我有以下代码摘录:

/*OOOOOHHHHH I've just noticed instead of an int here should be an *short int* I will just left it as it is because too many users saw it already.*/

int y=511, z=512;

y=y*z;

printf("Output: %d\n", y);
Run Code Online (Sandbox Code Playgroud)

哪能给我Output: -512.在我的任务中,我应该解释原因.所以我很确定这是因为隐式转换(纠正我,如果我错了:))从将int值赋给short int发生.但是我的导师说,事情恰好发生了,我想是"三轮".我找不到任何关于它的事情,我正在看这个视频,那个人解释(25:00)几乎和我告诉我的导师一样.

编辑:

这是我的完整代码:

#include <stdio.h>

int main() {

    short int y=511, z=512;

    y = y*z;

    printf("%zu\n", sizeof(int));
    printf("%zu\n", sizeof(short int));

    printf("Y: %d\n", y);


    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是我如何编译它:

gcc -pedantic -std=c99 -Wall -Wextra -o hallo hallo.c …
Run Code Online (Sandbox Code Playgroud)

c c++ type-conversion implicit-conversion

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

AngularJS将String转换为引用$ scope中对象的Object/Array

我在angular中创建了一个指令,其范围不是孤立的

<div ng-controller="myController">
    <ul>
      <li myDirective="model[1].list" >a lot more things will happen inside here</li>
    </ul>
</div>
Run Code Online (Sandbox Code Playgroud)

控制器:

app.controller("myController",["$scope",function($scope){ 
$scope.model = [
       {
          list:[ "object1","object2","object3" ]
       },
       {
          list:[ "object4","object5","object6" ]
       },
       {
          list:[ "object7","object8","object9" ]
       }
    ]
}]);
Run Code Online (Sandbox Code Playgroud)

指示:

    app.directive("myDirective",[function(){
    return {
         scope:true,
         controller:function($scope,$element,$attrs){
             /*
              How do I directly be able to manipulate from inside here what is assigned 

on the  $attrs.myDirective 

without ISOLATING the scope of the directive

                  */
             }
        }

    }]);
Run Code Online (Sandbox Code Playgroud)

我使用的解决方案之一是这个函数我把它放在指令中并处理分配给$ attrs.myDirective的字符串它与"model.list"很好用但是与"model [2] .list"它不是因为它不是为它而建.如何修改此功能或是否有更好的解决方案...

    $scope.rediks = function(string) …
Run Code Online (Sandbox Code Playgroud)

javascript string implicit-conversion angularjs

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