相关疑难解决方法(0)

C++的隐藏功能?

当涉及到"问题线"的"隐藏特征"时,没有C++的爱吗?想我会把它扔出去.C++的一些隐藏功能是什么?

c++ hidden-features

114
推荐指数
38
解决办法
8万
查看次数

使用+解决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万
查看次数

C中一元'+'运算符的目的是什么?

在C中,写下这样的内容是合法的:

int foo = +4;
Run Code Online (Sandbox Code Playgroud)

然而,据我所知道的,一元++4是一个空操作.是吗?

c

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

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

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

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

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
查看次数