相关疑难解决方法(0)

如何用cout打印函数指针?

我想用cout打印出一个函数指针,发现它不起作用.但是在将函数指针转换为(void*)之后它才起作用,printf与%p一样,例如

#include <iostream>
using namespace std;

int foo() {return 0;}

int main()
{
    int (*pf)();
    pf = foo;
    cout << "cout << pf is " << pf << endl;
    cout << "cout << (void *)pf is " << (void *)pf << endl;
    printf("printf(\"%%p\", pf) is %p\n", pf);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我用g ++编译它并获得如下结果:

cout << pf是1
cout <<(void*)pf是0x100000b0c
printf("%p",pf)是0x100000b0c

那么cout对int(*)()类型做了什么?我被告知函数指针被视为bool,是真的吗?cout用type(void*)做什么?

提前致谢.

编辑:无论如何,我们可以通过将函数指针转换为(void*)并使用cout将其打印出来来观察函数指针的内容.但它对成员函数指针不起作用,编译器抱怨非法转换.我知道成员函数指针是一个比简单指针更复杂的结构,但是我们如何才能观察成员函数指针的内容呢?

c++

49
推荐指数
3
解决办法
4万
查看次数

为什么std :: cout << main << std :: endl打印1?

#include <iostream>

int main(){
    std::cout << main << std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

为什么在命令行中打印1?

c++

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

函数调用缺少参数列表警告

我正在阅读"C++编程语言 - 第四版",我正在打一个简单的练习,只是为了获得C++语法,我不小心偶然发现了让我挑眉的东西.总之,我忘了补充()accept主:

bool accept()
{
    cout << "Do you want to proceed (y or n)?\n";

    char answer = 0;
    cin >> answer;

    if (answer == 'y')
    {
        return true;
    }
    return false;

}

int main()
{
    accept;
}
Run Code Online (Sandbox Code Playgroud)

这运行并编译并生成(在VS2015中)a

C4551 - 函数调用缺少参数列表

我发现自己在阅读lambda和一些关于SO的问题应该被关闭,因为他们主要是要求"调试我的代码".

我想如果代码编译并运行,并且该函数包含一个阻塞语句(等待用户输入)和一个返回类型,那么所有代码​​都将按预期执行,而不管是否遗漏了括号; 但事实并非如此.

另外,我想我会将调用更改为acceptmain,以bool a = accept; cout << a;尝试阻止任何优化(如果那是实际发生的事情),并且也没有调用accept()代码.

我很想知道的是:

  1. accept要编译成什么叫?
  2. 为什么不accept调用代码
  3. 为什么这只是一个警告,而不是错误(我知道我可以更改配置以将其显示为错误,当实际结果与预期结果不同时,我更加如此质疑这是如何被接受的语法所以"显着?"这问题可能是基于意见的,如果你同意,可以省略.)
  4. bool a = accept; cout << a;在main中运行代码生成 …

c++ c++11

6
推荐指数
2
解决办法
1957
查看次数

为什么C库函数在任何C++代码中都显示为函数的指针?

当我试图弄清楚下面代码发生了什么时,我得出了这个结论:

#include <iostream>

int main()
{
  std::cout << (div) << '\n';
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

div上述可以与被取代printf,atoi,difftime等不论是否我#include荷兰国际集团的适当的报头(ctime,time.h,cstdlib,...,),我得到没有编译器错误和节目被打印1.当我用函数名称作为前缀时,程序没有编译std::.

Clang警告解释了发生了什么:

warning: address of function 'div' will always evaluate to 'true' [-Wbool-conversion]
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:

  • 为什么即使适当的标题不是#included ,C库函数的名称也没有任何意义?
  • 为什么它们被定义为函数的指针?
  • 为什么它们位于命名空间之外std

c++

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

没有括号的C++函数调用

我在编程时忘记了函数调用后忘记括号,但是我只收到警告,我忽略了:

main.cpp:7:15: warning: expression result unused [-Wunused-value]
                if (i == 0) clearDisplay;
                            ^~~~~~~~~~~~
Run Code Online (Sandbox Code Playgroud)

刚做的时候也会发生同样的事情

int i = 0;
i;
Run Code Online (Sandbox Code Playgroud)

为什么这不是编译器错误?

#include <iostream>

void clearDisplay(void);

int main(void){
    for(int i = 0; i < 2; i++){
        if (i == 0) clearDisplay;
    }
}

void clearDisplay(void){
    std::cout << "test" << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

编辑:与没有括号的g ++"调用"函数相反(不是f()而是f;).为什么总是返回1?我不问为什么它被隐式浇铸为数字,但为什么像它确实编译器不提醒我关于if(i=0)if(i==0)

c++

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

函数名称表示什么以及更多

考虑这个简单的程序:

#include <iostream>

void length(void){
    std::cout<<"My length is void"<<std::endl;
}

void width(void){
    std::cout<<"My width is void"<<std::endl;
}

int main(void){
    std::cout<<"The program length is: "<<length<<std::endl;
    std::cout<<"The program width is: "<<width<<std::endl;
}
Run Code Online (Sandbox Code Playgroud)

该程序的输出是:

The program length is: 1
The program width is: 1
Run Code Online (Sandbox Code Playgroud)

程序打印出来的数字是多少,基本上没有多少C++知识,这对我来说看起来更加pythonic语法,看起来好像应该打印函数地址.我这样说是因为这个问题最初是在为openGL练习一些非常基本的程序时出现的,

回调是在GLUT中注册的,例如:

void line(void){
   //some code for line program ...
}

int main(int argc, char** argv){
    //some more code;
    glutDisplayFunc(line);
    glutMainLoop();
}    
Run Code Online (Sandbox Code Playgroud)

这几乎看起来好像我们正在传递函数的地址,但是,从上面的程序中可以清楚地知道这不是一个地址,指向函数的语法有点不同,如果是这样,这个函数如何被注册为打回来?我们传递的是 glutDisplayFunc什么?

并且,因为我想要注册一个已经传递参数的函数,我搜索python lambda函数的C++类比,并找到类似的lambda函数,但它没有成功:**

#include <iostream>

void line(int a,  int b){
//some code that does …
Run Code Online (Sandbox Code Playgroud)

c++ opengl glut

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

标签 统计

c++ ×6

c++11 ×1

glut ×1

opengl ×1