我想将一些C遗留代码更新到C++。假设我有类似于C中的代码:
//my_struct.h
typedef struct myStruct {
//some members go here
} myStruct;
int f1(myStruct*);
void f2(myStruct*);
//my_struct.c
#include "my_struct.h"
static int helper(myStruct* st)
{
return 21;
}
int f1(myStruct* st)
{
return helper(st);
}
void f2(myStruct* st) {}
如果我在CPP中将其更新为以下内容:
//myStruct.h
struct myStruct {
int f1();
void f2();
private:
int helper();
};
//myStruct.cpp
int myStruct::f1(){
return helper();
}
void myStruct::f2(){}
int myStruct::helper(){
return 21;
}
在C++中,将全局静态C函数转换为私有成员函数有什么影响?
前一种方法和后一种方法之间的优缺点(关于编译、链接、运行时)是什么?我没有在函数内部使用参数,以使示例简短(如果不使用它,我在其他问题中读到它可能应该转到匿名名称空间)。
//myStruct.h
struct myStruct {
int f1();
void f2();
}
//myStruct.cpp
namespace{
int helper(myStruct *st){
return 21;
}
}
int myStruct::f1(){
return helper(this);
}
void myStruct::f2(){}
1条答案
按热度按时间bbuxkriu1#
在C++中,将全局静态C函数转换为私有成员函数有什么影响?
这样做的影响是,您已经将模块的(私有的,内部的)实现细节作为(公共的)接口的一部分。
前一种方法和后一种方法之间的优缺点(关于编译、链接、运行时)是什么?
缺点:
也就是说,有更多的客户阅读和思考,即使它不应该影响他们,
即,如果你想改变
helper
,现在更新公共头,并导致广泛的重新编译文件,不应该受到影响优点:
在C++中,将实现文件本地细节(如
helper
)添加到匿名名称空间中是惯用的。