如何在C+中设置全局定义+;项目 因为我总是在C++中寻找构造函数,所以我想做这样的事情:< /P> #define constructor class Foo { /* constructor */ Foo(); };

如何在C+中设置全局定义+;项目 因为我总是在C++中寻找构造函数,所以我想做这样的事情:< /P> #define constructor class Foo { /* constructor */ Foo(); };,c++,C++,这样我就可以打字了 constructor ClassName::ClassName() {} 有没有一种好的方法可以设置它,使它在我的项目中是全局的,而不必在每个文件中实际定义它 我应该提到我正在使用VisualStudio,如果其中涉及一些特定的内容 (或者可能还有一些类似于override的关键字可用于构造函数?这可能是个坏主意,原因如下: 宏可能相当危险。如果您#定义构造函数,则源代码中任何位置的标记“构造函数”都将被空白替换,这可能会造成混乱。如果您在某处有一个名为“constru

这样我就可以打字了

constructor ClassName::ClassName() {}
有没有一种好的方法可以设置它,使它在我的项目中是全局的,而不必在每个文件中实际定义它

我应该提到我正在使用VisualStudio,如果其中涉及一些特定的内容


(或者可能还有一些类似于
override
的关键字可用于构造函数?

这可能是个坏主意,原因如下:

  • 宏可能相当危险。如果您
    #定义构造函数
    ,则源代码中任何位置的标记“构造函数”都将被空白替换,这可能会造成混乱。如果您在某处有一个名为“constructor”的变量,或者试图创建一个呢?如果包含的头(包括标准库)具有“构造函数”变量或类型,该怎么办
  • 虽然有一些关键字可以放在函数上,但这些关键字对语义影响不大,可以作为一个指示器,但这些关键字确实起到了一些作用,其含义会让其他阅读您代码的人感到困惑
  • 如果您在使用该语言时遇到困难,以至于很难找到构造函数,那么您要么使用IDE不好,要么不具备专业使用该语言所需的专业知识,因此显式标记构造函数并不能解决真正的问题
  • 还有更好的选择
关于你的问题的评论中提出了一个更好的选择——你可以在任何地方使用相同的评论:

class Foo {
    Foo(); // constructor
};
现在您可以通过搜索“constructor”来查找构造函数。如果希望通过搜索找到特定类的构造函数,可以执行以下操作:

#define constructor
class Foo {
    /* constructor */ Foo();
};
如果你坚持这样做,这就是我建议的方法

另一种方法: 我不建议你这样做。注释方法应该做您想要做的事情,并且不太可能误导人们阅读您的代码或导致意外的语义更改。但是如果您坚持使用关键字,请使用
explicit
关键字。将构造函数标记为“显式”可防止初始化如下对象:
Foo f={1,2}
,但不是这样:
Foo f{1,2}
。这很烦人,但不是致命的

class Foo {
    explicit Foo();
}

您可以将它放在一个头文件中,其中包含所有头文件中的头文件。或者使用IDE来查找constructor@Yeats你也可以使用@Yeats,如果你写的函数没有override关键字,但它实际上没有覆盖某些内容,那么就没有编译错误。如果您编写的函数打算用override关键字重写某些内容,但实际上没有重写编译错误的内容,即它会改变编译器的行为,如果您打算重写某个函数,这种方式实际上非常有用。我会写一个答案。评论不是为了进一步讨论;用聊天来代替,每个人都被网络所束缚;假设你有良好的意图,并将注意力集中在解决一个可回答的问题上。我真的认为
明确的
不是一个好主意。。。如果我看到一个标记为
explicit
的默认ctor,我会自动地认为这个类在某种程度上是特殊的(例如,标记类)。是的,出于这个原因,我也不喜欢
explicit
,这有点奇怪。我想我最后会做评论。虽然不能帮助我在别人的代码中找到构造函数,但我的全局定义想法也不能,所以…@L.F.我认为这也不是一个好主意。我已经更新了答案,以便在这方面更清楚。我只是把它作为一种可能性,如果asker坚持不使用注释(或它们的IDE)@JamesPicone将无参数标记为显式,实际上会阻止从
{}
进行复制初始化,例如
类c={}将受到影响:)@L.F.观点正确,更新答案。