考虑这两个函数定义:
void foo() { }
void foo(void) { }
Run Code Online (Sandbox Code Playgroud)
这两者有什么区别吗?如果没有,为什么void那里的论点?美学原因?
我目前正在重构/整理C++项目中使用的一些旧C代码,并定期查看以下函数:
int f(void)
Run Code Online (Sandbox Code Playgroud)
我倾向于写作:
int f()
Run Code Online (Sandbox Code Playgroud)
是否有任何理由不在整个代码库中用()替换(void)以提高一致性,或者两者之间是否存在我不知道的细微差别?更具体地说,如果C++中的虚拟成员函数被描述为:
virtual int f(void)
Run Code Online (Sandbox Code Playgroud)
派生类包括成员函数:
int f()
Run Code Online (Sandbox Code Playgroud)
这是一个有效的覆盖?另外,基于几乎相同的签名,我是否可能遇到任何链接器问题?
在C++中使用void没有参数的函数,例如:
class WinMessage
{
public:
BOOL Translate(void);
};
Run Code Online (Sandbox Code Playgroud)
是多余的,你不妨写一下 Translate();.
我,我自己通常都包括它,因为它在支持IDE显示的代码完成时有点帮助void,因为它确保了该函数绝对没有参数.
我的问题是,添加无void参数函数是一个好习惯吗?现代代码应该鼓励它吗?
完整的代码在这里:http://pastebin.com/MM3vWmqA
在函数fast_generator中,我为两个语句添加了注释.如果切换这些语句,代码运行速度会快1.8倍.如果删除第一个语句,代码将比原始版本执行得更快,但与切换时相比更慢.
测试用例应如下.
第一 - 最慢.452ms.
counter++;
i--;
Run Code Online (Sandbox Code Playgroud)
第二 - 比第一个更快.280ms.
i--;
counter++;
Run Code Online (Sandbox Code Playgroud)
第三 - 比第一个快,但比第二个慢.421ms.
i--;
Run Code Online (Sandbox Code Playgroud)
原始语句的汇编器输出是.
inc edx
mov eax, 6
Run Code Online (Sandbox Code Playgroud)
我已经验证,当切换这些语句时,汇编程序输出保持不变,这些asm指令的唯一区别是互换.
我用VC++ 10和VC++ 11测试过它,行为相同.有人可以解释为什么切换这些语句会加速算法~1.8倍?如果您认为std :: clock()不准确,请更改size = 7.在我的机器上,size = 7的差异是12000ms vs 7000ms.
我试图创建该类的两个实例,这些实例最终将使用Win32的mciSendString功能播放音乐文件。但是要进行测试,因为这是我第一次尝试使用std :: thread,所以我编写了一个test(void)方法,该方法输出类ID,我希望可以为我打印一系列的1和2,例如12122111112212121212 ...
我收到以下错误,test(void)方法确实存在吗?
错误1错误C2064:术语未求值为带有0个参数的函数
#include <iostream>
#include <thread>
typedef enum MusicStatus {
MUSIC_PLAYING = 0,
MUSIC_PAUSED,
MUSIC_STOPPED,
MUSIC_IDLE
} MusicStatus, *pMusicStatus;
class MusicPlayer
{
public:
MusicPlayer(void) {
m_bIsPlaying = false;
m_bIsPaused = false;
}
bool isPaused(void) {
return m_bIsPaused;
}
bool isPlaying(void) {
return m_bIsPlaying;
}
MusicStatus getState(void) {
if ( !m_bIsPlaying && !m_bIsPaused && !m_bIsStopped )
return MUSIC_IDLE;
if ( m_bIsPlaying )
return MUSIC_PLAYING;
if ( m_bIsPaused )
return MUSIC_PAUSED;
if ( m_bIsStopped )
return MUSIC_STOPPED;
return …Run Code Online (Sandbox Code Playgroud) 我有一行代码如下:
int method(void) const;
Run Code Online (Sandbox Code Playgroud)
但是我不确定参数中的(void)是什么,或者const是什么.这也应该是一个公共'get',我不确定如何在类中接近(void)和const.
c++ ×6
void ×3
c ×2
methods ×2
arguments ×1
assembly ×1
c++11 ×1
class ×1
function ×1
machine-code ×1
performance ×1
refactoring ×1