- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
由于 C++11 引入了新的统一初始化语法,许多人建议使用它来代替旧式语法。至少,如果不是这个所谓的极端情况:
struct Foo {
Foo(int){
std::cout << "default" << std::endl;
}
Foo(std::initializer_list<int>){
std::cout << "initlist" << std::endl;
}
};
int main(){
Foo f{200}; //prints "initlist"
}
使用 {}-always-style 会惹麻烦,尤其是在模板中。新语法似乎只有三种安全用法:
但也有一种情况我们必须使用统一的初始化语法:非静态数据成员初始化器。由于某种原因,C++可以识别
void Bar() {
Foo f(200);
}
但无法处理
struct Bar {
Foo f(200);
};
问题 #1:为什么 ()-syntax 在函数而不是类中起作用?有谁知道这背后的基本原理?
综上所述,我们最终得出了这个愚蠢的案例:
struct FooBar {
std::vector<int> bar(50); //doesn't work
std::vector<int> bar{50}; //not the intended effect
std::vector<int> bar = std::vector<int>(50); //works
};
当然,您也不能对数据成员使用auto。所以我要么笨拙地混合所有语法,要么根本不使用这些功能。
问题 #2:我是不是误解了什么?这不可能是有意的行为,对吧?
最佳答案
Question #1: Why does the ()-syntax work inside a function but not a class? Does anyone know the rationale behind this?
因为它看起来像一个函数声明,并且已经有足够多的混淆:
Foo f(); // function declaration. This still catches people out
但是您可以使用()
,只需使用复制初始化语法:
T t = T(args);
Question #2: Did I misunderstand something? This can't be intended behavior, can it?
这是设计行为。不幸的是,它不能很好地与某些类型的标准库容器一起使用(例如您的示例中的 std::vector<int>
)。你只需要记住一个隐式的 initializer_list
构造函数胜过所有其他兼容的构造函数。你应该努力设计你自己的类,这样它们就不会遇到这个问题。
关于c++ - 应对 C++11 初始化语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21828031/
本文分享自华为云社区《【沃土方案--金融】银丰新融-反洗钱自主监测系统(一)》,作者:HuaweiCloudDeveloper 。 “三反(反洗钱、反恐怖融资、反逃税)”意见持续深化落实,第四轮互评估
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 9 年前。 Improve this ques
我们有一个数据驱动的 Activity ,它构建了一大组(通常最多 100 个)类似按钮的组件,并将它们放在一个 Scrollable 中。每个按钮都是从资源中膨胀的,并且基于 RelativeLay
我在一个非常早期的项目中使用 Hibernate EntityManager 和 Hibernate Annotations for ORM。该项目需要尽快启动,但规范不断变化,我担心系统将启动并收集
这是一个来自 SPOJ 的简单编程问题:http://www.spoj.com/problems/PROBTRES/ . 基本上,您需要输出 i 和 j 之间数字的最大 Collatz 循环。 (
由于 C++11 引入了新的统一初始化语法,许多人建议使用它来代替旧式语法。至少,如果不是这个所谓的极端情况: struct Foo { Foo(int){ std::cout
Log4J2漏洞涉及的影响太广了,昨天发文后很多粉丝留言问Spring Boot项目是否受到Log4J2漏洞影响。Spring官方已经全面进行了排查,现在大家可以知道这些信息和应对方法。 默认
我正在通过 UDP(视频数据)接收 RTP。 RTP 包含我需要解码的 H264。不幸的是,大多数 RTP 都包含零散的数据。由于缺少 RTP 序列,我无法正确重建 H264。 关于如何减少数据丢失以
我正在阅读 this thread并在解决方案中注意到,如果您发送的数据长度与实际数据分开,Nagle 的算法可能会播放和取消同步发送的数据。 我想知道这一点,因为我看到很多代码示例,客户端首先发送数
我正在创建一个简单的应用程序,它将使用react-native-firebase和react-native-maps。按照安装文档的说明,我已经启动并运行了 map ,没有任何问题。接下来,我已经安装
我是一名优秀的程序员,十分优秀!