相关疑难解决方法(0)

在调用std :: numeric_limits <unsigned char>成员之前,一元"+"的目的是什么?

在cppreference的文档中看到了这个例子std::numeric_limits

#include <limits>
#include <iostream>

int main() 
{
    std::cout << "type\tlowest()\tmin()\t\tmax()\n\n";

    std::cout << "uchar\t"
              << +std::numeric_limits<unsigned char>::lowest() << '\t' << '\t'
              << +std::numeric_limits<unsigned char>::min() << '\t' << '\t'
              << +std::numeric_limits<unsigned char>::max() << '\n';
    std::cout << "int\t"
              << std::numeric_limits<int>::lowest() << '\t'
              << std::numeric_limits<int>::min() << '\t'
              << std::numeric_limits<int>::max() << '\n';
    std::cout << "float\t"
              << std::numeric_limits<float>::lowest() << '\t'
              << std::numeric_limits<float>::min() << '\t'
              << std::numeric_limits<float>::max() << '\n';
    std::cout << "double\t"
              << std::numeric_limits<double>::lowest() << '\t'
              << std::numeric_limits<double>::min() << '\t'
              << std::numeric_limits<double>::max() …
Run Code Online (Sandbox Code Playgroud)

c++ char unary-operator

129
推荐指数
4
解决办法
4070
查看次数

使用+解决lambda的函数指针和std :: function上的模糊重载

在下面的代码中,第一次调用foo是不明确的,因此无法编译.

第二个,+在lambda之前添加,解析为函数指针重载.

#include <functional>

void foo(std::function<void()> f) { f(); }
void foo(void (*f)()) { f(); }

int main ()
{
    foo(  [](){} ); // ambiguous
    foo( +[](){} ); // not ambiguous (calls the function pointer overload)
}
Run Code Online (Sandbox Code Playgroud)

+这里的符号是什么?

lambda overloading c++11

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

一元加运算符有什么作用?

一元加运算符有什么作用?我找到了几个定义(这里这里),但我仍然不知道它将用于什么.它似乎没有做任何事情,但有理由,对吗?

c c# c++ unary-operator

75
推荐指数
7
解决办法
4万
查看次数

编译器在这里做了什么:int a = b*(c*d*+ e)?

我的程序中有一个奇怪的错误,经过几个小时的调试后,我发现了以下非常愚蠢的行:

int a = b * (c * d *  + e)
Run Code Online (Sandbox Code Playgroud)

如果你没有看到它:在de我之间写的* +,只是一个+意图.

为什么这会编译,它实际上意味着什么?

c++ arithmetic-expressions

72
推荐指数
5
解决办法
7760
查看次数

使用printf打印size_t的正确方法是什么?

Size_t被定义为一个unsigned整数,但它的大小取决于你是在32位还是64位机器上.什么是正确和便携的打印方式size_t

c c++

68
推荐指数
3
解决办法
5万
查看次数

Java的一元加运算符的目的是什么?

Java的一元加运算符似乎来自C,通过C++.

int result = +1;   
Run Code Online (Sandbox Code Playgroud)

它似乎有以下影响:

  • 如果它是包装器对象,则将其操作数取消装箱
  • int如果它不是已经int或更宽,则提升其操作数
  • 稍微复杂化包含大量连续加号的邪恶表达式的解析

在我看来,有更好/更清晰的方法来做所有这些事情.

这个SO问题中,关于C#中的对应运算符,有人说"如果你觉得有必要,它就会超载".

但是,在Java中,不能超载任何运算符.那么这个一元加运算符是否只存在于Java中,因为它存在于C++中?

java unary-operator language-history

36
推荐指数
3
解决办法
7020
查看次数

一元+算子有实际用途吗?

一元运算+符是否仅包含与一元运算-符对称,还是在C++代码中找到了一些实际用途?

在这里搜索,我遇到了C中一元'+'运算符的目的是什么?,但唯一有用的场景涉及预处理器宏.这些都是很好的,但它们似乎是一些不常见的情况,并涉及宏.是否有涉及更常见的C++代码的用例?

c++ operators unary-operator

28
推荐指数
4
解决办法
2217
查看次数

一元+运算符会进行类型转换吗?

直到现在我才相信没有使用一元+算子.

但后来我遇到了以下示例:

char ch;
short sh;
int i;

printf("%d %d %d",sizeof(ch),sizeof(sh),sizeof(i)); // output: 1 2 4

printf("%d %d %d",sizeof(+ch),sizeof(+sh),sizeof(i)); // output: 4 4 4
Run Code Online (Sandbox Code Playgroud)

这是否意味着+在这里进行类型转换?

因为它的行为与以下相同

printf("%d %d %d",sizeof((int)ch),sizeof((int)sh),sizeof(i)); // output: 4 4 4
Run Code Online (Sandbox Code Playgroud)

这迫使我认为+是在进行类型转换.

但后来我尝试了 double

double f;
printf("%d %d",sizeof(+f),sizeof((int)f),sizeof(f));  // output: 8 4 8
Run Code Online (Sandbox Code Playgroud)

这迫使我重新思考一元运算+符.

所以我的第二个问题是:一元+算子对算子有特殊影响sizeof吗?

c sizeof unary-operator integer-promotion

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

C中哪些运算符的优先级错误?

在K&R C(2E)的"简介"部分,有这一段:

与任何其他语言一样,C也有其瑕疵.一些运营商的优先顺序错误; ...

这些是哪些运营商?他们的优先权如何错?

就是其中一个案件?

c operators operator-precedence

7
推荐指数
2
解决办法
317
查看次数

在指针初始化中使用一元加运算符有什么用?

我知道C&C++都是不同的语言,今天我在下面的程序中做了一点点错误,但程序在各种C++编译器上编译得很好(g ++,clang,MSVC++)

考虑以下计划:

int main()
{
    int s[]={3,6,9,12,18};
    int* p=+s;  // Observe this strange looking initialization due to use of unary + operator
}
Run Code Online (Sandbox Code Playgroud)

上述程序在编译C++罚款(见现场演示这里),但不是在C(见现场演示这里).我的编译器(gcc 4.8.1)给出了当我编译它作为一个C程序我下面的错误.

[Error] wrong type argument to unary plus
Run Code Online (Sandbox Code Playgroud)

一元加运算符在这里服务的目的是什么?它到底在做什么?为什么C不允许?

c arrays pointers unary-operator

3
推荐指数
2
解决办法
770
查看次数

int上的一元+运算符

我有以下声明,它编译:

static unsigned char CMD[5] = {0x10,0x03,0x04,0x05,0x06};

int Class::functionA(int *buflen)
{
    ...
    int length = sizeof(CMD); + *buflen; // compiler should cry! why not?
    ...
}
Run Code Online (Sandbox Code Playgroud)

为什么我没有编译错误?

c++ unary-operator

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

任何机构都可以解释它+(+ i--)

如何+variable操作或+(+variable)操作?

int i=0;
while(+(+i--)!= 0){
     // do 
}
Run Code Online (Sandbox Code Playgroud)

c c++ java

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