18得票2回答
返回{}和返回Object{}的区别

这两个函数之间有显著的区别吗?struct Object { Object(int i) : i{i} { } int i; }; Object f() { return {1}; } Object g() { return Object{1}; }

17得票3回答
为什么只有在列表初始化的情况下才会出现缩窄转换警告?

我有以下代码:class A { public: A(const unsigned int val) : value(val) {} unsigned int value; }; int main() { int val = 42; ...

16得票1回答
为什么这个缩小转换没有被检测到?

在使用列表初始化构造变量时(比如 int x{ 5 };),标准 §8.5.4 规定: 如果需要进行缩小转换[...]以转换任何一个参数,则程序是非法的。 (7) 缩小转换是一种隐式转换 - (7.4) 从整数类型或未经作用域限定的枚举类型到整数类型的转换,该整数类型不能表示...

16得票1回答
GCC拒绝参数的列表初始化

我有以下代码:#include <initializer_list> #include <utility> enum class Classification { Unspecified, Primary, Secondary }; class Clas...

15得票1回答
为什么 Foo({}) 调用的是 Foo(0) 而不是 Foo()?

从代码中生成的可执行文件由clang 3.5.0和gcc 4.9.1生成。 #include <iostream> struct Foo { Foo() { std::cout << "Foo()" << std::endl; } Foo(i...

15得票3回答
当初始化一个变量时,使用花括号({})或等号(=)。

当我阅读C++编程语言 第四版时,作者提到在初始化变量时,最好使用{}而不是=: 但我发现更多的人使用=而不是{}。 那么哪种方法是一个好的原则?=还是{}?

15得票3回答
调用可变参数函数模板时传递花括号初始化列表参数出现问题

考虑这个函数模板: template <class... T> void foo (std::tuple<T, char, double> ... x); 这个调用是有效的: using K = std::tuple<int, char, double&g...

15得票1回答
我能否使用元素的完美转发来进行std::vector的列表初始化?

我注意到std::vector的聚合列表初始化在需要使用move语义时执行复制初始化。同时,多次emplace_back可以实现我想要的效果。 我只能想出一个不完美的解决方案,编写一个模板函数init_emplace_vector。然而,它只对于非显式单值构造函数是最优的。 templat...

14得票2回答
我能使用C++11的大括号初始化语法来避免为简单聚合体声明无关紧要的构造函数吗?

假设我有以下代码: #include <vector> struct Foo { int tag = 0; std::function<void ()> code; }; int main() { std::vector<Foo>...

14得票2回答
"= {}"形式的复制初始化

以下是给定的内容: #include <stdio.h> class X; class Y { public: Y() { printf(" 1\n"); } // 1 // operator X(); // 2 }; class X { ...