何时使用#define 与 typedef?
When to use #define vs typedef?
所以,我一直在努力减少 using namespace std
,因为我现在有点明白它会在代码中引起什么冲突,即使我不会使用别人的很快就会编写代码,我想训练自己使用良好的实践...
但我仍然不喜欢代码的外观,当你在代码中到处散布作用域运算符时,我遇到的一个建议是使用 typedefs
来自定义代码的外观,我写的是:
#include <iostream>
#include <fstream>
#include <string>
typedef std::cout std_cout;
typedef std::endl std_endl;
typedef std::string std_string;
typedef std::fstream std_fstream;
typedef std::ios std_ios;
现在,当我键入此内容时,一切正常,除了前两行(在第二个代码块中)分别给我 variable "std::cout" is not a type name
和 function template "std::endl" is not a type name
错误消息。
现在,如果我用 #define
s 替换所有 typedef
s,问题最初似乎已经解决,但最终我会在每一行中出现大量语法错误包含这些定义之一。 (此外,我知道 #define
也和 using namespace std
一样有问题,所以我也尽量避免那个问题)
更复杂的是,第一行(在同一块中),这是这里有问题的两行之一,与我在网上的许多资源中看到的完全相同,所以我不知道什么是对的了...
如何正确定义数据类型?
提前致谢。
首先,std::cout
不是类型,而是对象。因此,使用
typedef std::cout std_cout;
是行不通的。
使用
typedef std::string std_string;
是合法的。但是,我有以下顾虑。
当 reader 的代码看到 std_string
时,他们会想知道它的含义并且必须追查它的定义。与使用 std::string
.
相比,这是不必要的时间浪费
使用 std_string
可以在输入时仅节省一个字符。这并没有节省多少创建代码的时间。
您无法阻止团队中的其他人使用 std::string
。当两者都存在于代码库中时,那就太糟糕了。
But I still don't like the way the code looks when you sprinkle scope operators all over it, one advice I came across is to use typedef
s to customize how things looks a bit
恕我直言,这是个糟糕的建议。
我的建议: 不要理会 typedef
。只需使用完全限定名称。它使代码更具可读性和可维护性。
所以,我一直在努力减少 using namespace std
,因为我现在有点明白它会在代码中引起什么冲突,即使我不会使用别人的很快就会编写代码,我想训练自己使用良好的实践...
但我仍然不喜欢代码的外观,当你在代码中到处散布作用域运算符时,我遇到的一个建议是使用 typedefs
来自定义代码的外观,我写的是:
#include <iostream>
#include <fstream>
#include <string>
typedef std::cout std_cout;
typedef std::endl std_endl;
typedef std::string std_string;
typedef std::fstream std_fstream;
typedef std::ios std_ios;
现在,当我键入此内容时,一切正常,除了前两行(在第二个代码块中)分别给我 variable "std::cout" is not a type name
和 function template "std::endl" is not a type name
错误消息。
现在,如果我用 #define
s 替换所有 typedef
s,问题最初似乎已经解决,但最终我会在每一行中出现大量语法错误包含这些定义之一。 (此外,我知道 #define
也和 using namespace std
一样有问题,所以我也尽量避免那个问题)
更复杂的是,第一行(在同一块中),这是这里有问题的两行之一,与我在网上的许多资源中看到的完全相同,所以我不知道什么是对的了...
如何正确定义数据类型?
提前致谢。
首先,std::cout
不是类型,而是对象。因此,使用
typedef std::cout std_cout;
是行不通的。
使用
typedef std::string std_string;
是合法的。但是,我有以下顾虑。
当 reader 的代码看到
std_string
时,他们会想知道它的含义并且必须追查它的定义。与使用std::string
. 相比,这是不必要的时间浪费
使用
std_string
可以在输入时仅节省一个字符。这并没有节省多少创建代码的时间。您无法阻止团队中的其他人使用
std::string
。当两者都存在于代码库中时,那就太糟糕了。
But I still don't like the way the code looks when you sprinkle scope operators all over it, one advice I came across is to use
typedef
s to customize how things looks a bit
恕我直言,这是个糟糕的建议。
我的建议: 不要理会 typedef
。只需使用完全限定名称。它使代码更具可读性和可维护性。