为什么"types may not be defined in parameter types"
Why "types may not be defined in parameter types"
在C++20中,我们被允许使用命名的初始值设定项(https://en.cppreference.com/w/cpp/language/aggregate_initialization#Designated_initializers(。该 tl;博士;是你可以有命名的结构初始值设定项,例如
struct Args {
int a = 20;
string b = "b";
Foo* const foo; // must be defined
};
void Bar(Args x);
Bar({.b="woot", .foo=&f})
更简洁的语法(如果通过一个间接级别,似乎会自动提供命名参数的语法(是:
void Bar(struct{int a=20; string b="b"; Foo* const foo;}) {/*...*/}
"参数列表中的类型定义"指出它是不允许的,但我想知道为什么不允许它。是否有一些有趣的 c++ 解析/链接问题会被这种类型的声明打破?也许它需要限制为 POD 类型或其他东西?
将注释编译成答案(尽管引用的答案会更有用(:
编译器很难确定函数的两个不同声明是否相同。从技术上讲,每个函数声明都会声明自己的匿名类型。任何让它看起来像"相同"类型的技巧都需要大量的类型重整,并且无论如何都需要将类型命名为"引擎盖下"。
相关文章:
- netcat command in c++
- Difference in displaying cv2 Mat
- C++ MFC Libraries in Travis CI
- 如何在OpenSSL中从configuration.h.in获取configuration.h
- 创建具有 new in 函数和"this is nullptr"异常的对象
- IN, OUT, INOUT Parameters
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 有人安装"IITB Simplecpp in mac"吗?
- 从 C 样式字符串中删除子字符串 "in place" 在C++代码中
- 使用 cmake 的 LLVM 构建在 tsan_libdispatch_mac.cc 期间失败; "Error: conflicting types for ..."
- 如何修复"error: ‘_1’ was not declared in this scope"?
- Softmax Implementation in C++
- 将 out/in out 参数与 if/switch 的 init 语句一起使用
- IF-nesting in c++
- 为什么"types may not be defined in parameter types"
- 传递自定义函数类型时的'incompatible types in assignment'
- char16_t and char32_t types in C++11
- 对于相互转换的类型,有没有办法绕过"deduced conflicting types for parameter in template instantiation"?
- "incompatible types in assignment of 'char' to 'char'[100]"我使用的是 strcat 对吗?
- SunCC 5.12 至 5.14 和 "Types cannot be declared in anonymous union"