KeyNotes:
.cc文件里使用匿名命名空间或者sttic声明X::Y::foo 等价与X::foo。其主要用于跨版本的ABI兼容问题namespace X{
inline namespace Y{
void foo();
} // namespace X
} // namespace Y
.h头文件使用匿名命名空间违背C++的唯一定义原则(ODR)使用建议:
在namespace的结尾}处添加注释
不要在std命名空间中声明任何东西,包括标准库类的前置声明(行为未定义)
禁止使用类似using namespace foo的语句,会导致污染当前命名空间
不要在头文件中使用命名空间别名,除非显示标记内部空间使用。如下是可以的:
namespace paddle{
namespace framework{
using Tensor = paddle::Tensor; // 仅在当前命名空间使用
void foo(){
using LoDTensor = paddle::LoDTensor; // 限制在一个函数内部使用
}
} // namespace framework
} // namespace paddle
.cc文件中一个变量不需要被外部使用时(内部链接性),可以将其放在匿名空间或者声明为static。但不要在.h文件中这么做。KeyNotes:
使用建议:
定义非成员函数,且只在.cc文件中使用,使用static关键字修饰,如:
static void foo(int x){}
.c和.cc都是一个编译单元const char[]分别代替 vector和stringexplicit关键字。explicit,因为他们并不执行类型转换。explicit关键字(没有意义);例外情况:除了第一个参数外其他参数都有默认值。std::initializer_list作为参数的构造器,也应该省去explicit。KeyNotes:
使用建议:
KeyNotes:
使用建议:
publicvirtual关键字override关键字=0)和静态函数protected)<,请也重载>、=public:、protected:、private:来组织typedef、using和嵌套的类与结构体)、常量、工厂函数、构造函数、赋值运算符、析构函数、其他函数、数据成员。原文:https://www.cnblogs.com/CocoML/p/14643406.html