为什么不能调用一个不带参数的函数调用函数调用作为不返回任何值的参数(IMHO相当于调用一个不带参数的参数的函数).
例如:
void foo(void) {...}
void bar(void) {...}
foo(bar())
Run Code Online (Sandbox Code Playgroud)
不要误解我的意思,我知道void这不是一个价值,它不能像对待一样.
凭借我的逻辑,这将是有道理的,应该可以做到这一点.我的意思是,为什么不呢?任何争论为什么不可能?
我猜你们大多数使用C/C++的人都对预处理器的工作原理有所了解(或多或少).直到今天我才这么想,但我的直觉被证明是错误的.这是故事:
今天我尝试了一些东西,但我无法解释结果.首先考虑以下代码:
#define A B
#define B A
A
B
Run Code Online (Sandbox Code Playgroud)
怎么了?好吧,用-E标志编译后的结果如下:
A
B
Run Code Online (Sandbox Code Playgroud)
嗯,好吧,也许不是任何人都会想到的,但这是可以解释的.我猜这个预处理器以某种方式弄清楚存在一些问题,而且没有问题.
我尝试的下一件事是这样的:
#define A B
#define B A C
#define C x
A
B
Run Code Online (Sandbox Code Playgroud)
现在对我来说,无法解释的结果:
A x
B x
Run Code Online (Sandbox Code Playgroud)
这怎么发生的?我无法弄清楚这是怎么发生的合理方式.第一个命令(#define AB)无法执行,因为A将被B替换,最终结果应该相同.但如果不是,那么"A x"就无法发生!
我的问题:我错过了什么?显然我不知道预处理器如何工作的确切方式.你知道有关它的任何消息来源吗?
我有功能重载的问题.我将向您展示一些简单的例子:
class A {};
class B : public A{};
void somefunction(A&, A&);
void somefunction(B&, B&);
void someotherfunction() {
...
A& a1 = ...
A& a2 = ...
...
}
Run Code Online (Sandbox Code Playgroud)
a1和a2都是B的实例
somefunction(a1,a2);
Run Code Online (Sandbox Code Playgroud)
电话
void somefunction(A&, A&);
Run Code Online (Sandbox Code Playgroud)
我做错了什么?我的意思是多态性和重载是这样的东西,不是吗?
编辑:好的,现在我知道它不起作用(感谢您的答案).
任何解决方案如何做到这一点?没有铸造.
edit2:好吧保持原样,使用类型转换,因为我想要的东西是不可能的.感谢你的帮助.
我是c ++的新手,我有一个问题.
假设我们有一个基类Base和两个派生类Derived1和Derived2.fe Derived1有一个带整数的构造函数,Derived2有一个带布尔值的构造函数.
是否有可能在运行时(或在编译时)确定要创建这两个子类中的哪一个并将其分配给Base类.
像这样:Base b = ???(value),其中value是integer或boolean类型.
提前致谢!