我正在按照一个简单的教程来创建DLL。 在这个过程中,我对cpp文件中的一些符号感到有点困惑
dll.h - the header file
#blablablabla
namespace TutTest {
class TutTestClass { //for very complicated math!!!
public:
static dll_API double Add(double a, double b);
static dll_API double Subtract(double a, double b);
static dll_API double Multiply(double a, double b);
};
}
dll.cpp - the cpp file :)
#blablablabla include and such
namespace TutTest{
double TutTest::Add(double a, double b){
return a + b;
}
double TutTestClass::Subtract(double a, double b){
return a - b;
}
double TutTest::TutTestClass::Multiply(double a, double b){
return a * b;
}
}
在上面的.cpp文件中,默认表示法(在教程中使用)是“double TutTest :: ...”,但是我玩了它并注意到“TutTestClass ::”和“TutTest ::” TutTestClass ::“似乎有效,因为IDE不会抛出任何错误/警告。
所以我想知道,3个符号是否意味着相同?他们相同吗? 如果是,除了个人编码风格之外,符号之间是否有任何区别? 或者这些符号在意义上是否有所不同?
答案 0 :(得分:2)
TutTestClass::Subtract
是正确的。 Subtract
是类TutTestClass
的(静态)成员函数,因此您必须相应地对其进行限定。
TutTest::TutTestClass::Multiply
技术上是正确的,但很奇怪。在名称空间TutTest
内,名称TutTestClass
会自动引用TutTest::TutTestClass
,因此明确限定该名称是多余的。
TutTest::Add
不应该编译。这样做的目的是在命名空间Add
中定义命名空间范围函数TutTest
。但是,在
该函数已在命名空间中声明,AND
声明在外部所涉及的命名空间中发生。
这些都不适用于您的情况。
答案 1 :(得分:1)
命名空间包含自身及其anchestores,因此TutTest::
内的TutTest
不执行任何操作。
但正因为如此,TutTest::Add
与TutTest::TutTestClass::Add
不同。 (你实际上是在定义另一个从未声明过的函数)
在namaspace TutTest { ... }
内你可以避免TutTest::
但是要在类baces之外定义类成员(即使是静态的),你需要用它所属的类来限定函数名。