在C++中,之间有什么区别:
struct Foo { ... };
Run Code Online (Sandbox Code Playgroud)
和
typedef struct { ... } Foo;
Run Code Online (Sandbox Code Playgroud) 在这个问题中,我遇到了一个非常奇怪的问题typedef:
struct Date {
int day, month, year;
} typedef date_s;
Run Code Online (Sandbox Code Playgroud)
我一直看到typedef遵循这个'规则':
typedef <existing> <new>;
Run Code Online (Sandbox Code Playgroud)
例如:
typedef unsigned long long ull;
typedef int kph; // speed
typedef void (*alpm_cb_log)(alpm_loglevel_t, const char *, va_list);
typedef int int_t;
typedef char char_t, *char_p, (*fp)(void);
Run Code Online (Sandbox Code Playgroud)
第四个是从这里取的,第五个和第六个来自cppreference
而这是我怎么会typedef一struct:
typedef struct {
int a, b, c;
} data;
// and then use it
data Something;
Run Code Online (Sandbox Code Playgroud)
问题是这怎么可能写这样的typedef?它甚至没有意义(至少对我而言). …
typedef说明符的语法:
typedef <existing_name> <alias_name>
Run Code Online (Sandbox Code Playgroud)
例如:
typedef long unsigned int Int;
Run Code Online (Sandbox Code Playgroud)
它工作正常.
但是,如果我typedef在宣言中的任何地方放置,像这样:
long unsigned typedef int Int;
Run Code Online (Sandbox Code Playgroud)
然后,它也工作正常.
为什么?我们typedef可以在宣言中放置任何地方吗?
所以我正在阅读关于lambda演算的模板元程序的实现,这是TMP图灵完备性的一个证明.
当我阅读源代码时,我偶然发现了一行(然后更多),如下所示:
template <int Name, typename Value, typename Env>
struct EnvLookup <Name, Binding<Name,Value,Env> >
{
Value typedef result ; // Line 84, what is this ?
} ;
Run Code Online (Sandbox Code Playgroud)
我已经习惯了typedef Type Alias;,但Type typedef Alias;对我来说却很陌生.而且它仍然可以用g ++ 4.9.0编写好的版本-std=c++98.
我在Google上找不到关于这种语法的任何文档,也没有关于SO的文档.这是否符合标准?也许是一个g ++扩展?它会融合吗 ?