uniform-initialization相关内容
也就是说,为什么会这样: struct S {};结构体{T(S& s) : s{s} {}S&s;};int main(){秒;t{s};} 给我一个 GCC 4.7 的编译器错误: test.cpp: 在构造函数 'T::T(S&)' 中:test.cpp:5:18: 错误:“S&"类型的非常量引用的初始化无效来自''类型的右值 ? 要修复错误,我
..
以下代码: #include 结构体{整数 x, y;};int main(){std::vectorv;v.emplace_back(0, 0);} 使用 GCC 编译时出现以下错误: 在 c++/4.7.0/i686-pc-linux-gnu/bits/c++allocator.h:34:0 包含的文件中,来自 c++/4.7.0/bits/allocator.h:48,来自 c++/4
..
我非常喜欢统一初始化,并且在大多数情况下我想构造初始化变量时都会使用它.最近,我在构造 cv::Mat 类型的变量时遇到了奇怪的错误. cv::Mat lookUpTable( 1, 256, CV_8U );uchar* p = lookUpTable.ptr();for( int i = 0; i (pow(i/255.0, gamma ) * 255.0);} 虽然这个实现效果很好,但如
..
在C ++中,当使用initializer_list语法初始化对象时,如果没有其他列表初始化规则适用,则对象的常规构造函数也会参与重载解析.据我了解,以下代码调用X :: X(int) class X {int a_;X(int a):a_(a){});无效foo(){X条{3};} 但是我不明白,为什么在initializer_lists的上下文中还要考虑常规构造函数.我觉得现在很多程序
..
我有一个POD ChParam ,它是可变参数模板函数 set 中的一个参数.我想在花括号 p.set({Param :: D,1000.f},{Param :: p,2000.f})中传递给函数形参(构造函数参数).并且认为构造函数将被隐式调用,并且将创建 ChParam 对象.但这是不可能的,我应该显式创建一个对象 a.set(ChParam {Param :: D,1000.f},ChPar
..
两种初始化形式T obj = {...}和T obj{...}有什么区别? 最初,我认为T obj = {...}是T obj = T{...}的简写,其中将一个临时对象复制到了我们的新对象中.尽管它不执行复制构造函数(复制省略),但需要它的存在和访问权限做到这一点.但是,当我通过使构造函数私有化来阻止对特定类的复制构造函数访问时,没有错误. 这意味着不涉及复制机制.那么'='符号的作用是什么
..
如果尝试对 std :: set 使用统一的初始化程序,则会得到不同的结果。 示例: int main() { std :: array a {1,2,3, 4}; std :: set s1 {a.begin(),a.end()}; std :: set s2 {a.begin(),a.end()}; std :: set s3(a.begin(),a.
..
作为更大项目的一部分,我正在玩 std :: tuple 和模板;请考虑以下代码: template void foo(tuple t){} void bar(tuple quxx(){返回{1,’S}; } int main(int argc,char co
..
这里是有问题的代码示例: 结构A { A()= delete; }; int main() { // A a(); //编译,因为它是一个函数声明(最令人讨厌的解析) // A a; //不像预期的那样编译 A a {}; //编译,为什么?默认构造函数被删除。 } 尝试此处与任何可用的编译器一起使用。我尝试了几种,但没有发现编译错误。 解决方案
..
我鼓励这个问题: 如果我有 A类 { 公众: }; int main() { A a {}; A b {a}; } gcc给出: moves.cc:在函数'int main()'中: move.cc:15:7:错误:'A'的初始值设定项过多 A b { a}; 但是当我使用A b(a)而不是A b {a}时,所
..
我正在尝试使用long 类型变量转换为 int 类型变量/en.cppreference.com/w/cpp/language/list_initialization“ rel =” nofollow noreferrer“> 统一初始化 ,并且没有它。但是我只有在统一初始化时才收到编译器警告。这是为什么?为什么在两种情况下 gcc 都不发出警告?我也尝试过使用 clang 并获得类似的结果。
..
考虑用GCC 4.7.2 g++ -std=c++11 test.cc 编译的这个简短程序 #include #include struct type{ type(int a) : v(a) {} int v; }; typedef std::shared_ptr type_ptr; int main(){ int value =
..
我在“> 前问过有关(没有得到回答),然后我想也许使用括号初始化会有所帮助,但没有帮助. 这很完美: std::map m = {{1, 'a'}, {3, 'b'}, {5, 'c'}, {7, 'd'}}; 但这不是: std::map m; m = {{1, 'a'}, {3, 'b'}, {5, 'c'}, {7, 'd'}
..
我正在制作一个小类,该类使用按其大小模板化的数组.这是一些代码... .hpp template class KeyCombinationListener { public: KeyCombinationListener( const std::array& sequence, s
..
我正在尝试使用C ++的字符串类的统一初始化器.下面是代码: #include #include using namespace std; int main() { string str1 {"aaaaa"}; string str2 {5, 'a'}; string str3 (5, 'a'); cout
..
草稿书有效的C ++ 11 Scott Meyers指出: 在创建对象时区分()和{} Object obj(args...)和Object obj{args...}有什么区别?以及斯科特为什么这么说. 更新: 问题如何使用C ++ 11统一初始化语法?询问操作方法,而这个问题询问原因. Update2: 我发现以下链接是有帮助的,并完全回答了这个问题:
..
请考虑以下代码段: #include struct A { A() {} A(const A&) {} }; struct B { B(const A&) {} }; void f(const A&) { std::cout
..
auto a = unique_ptr(new A( )); map>米; m [1] = move(a); 我可以使用统一初始化这个吗?我试过 map> m {{1,unique_ptr(new A())}}; 但是我收到一个错误。
..
这是合法的c ++ 0x语法吗? class A { public: void some_function(const std :: set& options = {}); //注意这是合法的,它将const引用绑定到一个临时: void some_function(const std :: set& optio
..
我有以下类: struct foo { std :: size_t _size; int * data; public: 显式foo(std :: size_t s):_size(s){} foo(std :: size_t s,int v) :_size { data = new int [_size]; std :: fill(& data [0],& da
..