草庐IT

variable-initialization

全部标签

C++14 警告 : too many template headers for variable (should be 0)

在尝试最近的g++-5编译器时,我在一个文件中写了以下语句:templateTa;templateinta=1;结果:warning:toomanytemplateheadersfora(shouldbe0)同样有效,它并没有真正专门化a.例如templateTa;templateinta=1;intmain(){std::cout这个语法有什么奥秘? 最佳答案 模板参数只能在function模板的显式特化中被省略。你有一个变量模板,所以你必须包含:templateinta=1;引用C++14(n4140),14.7.3/10(强调

C++14 警告 : too many template headers for variable (should be 0)

在尝试最近的g++-5编译器时,我在一个文件中写了以下语句:templateTa;templateinta=1;结果:warning:toomanytemplateheadersfora(shouldbe0)同样有效,它并没有真正专门化a.例如templateTa;templateinta=1;intmain(){std::cout这个语法有什么奥秘? 最佳答案 模板参数只能在function模板的显式特化中被省略。你有一个变量模板,所以你必须包含:templateinta=1;引用C++14(n4140),14.7.3/10(强调

c++ - 我可以忽略 gcc 警告 : ‘Foo::m_bar’ should be initialized in the member initialization list [-Weffc++]

structBar{Bar(){}};structFoo{Foo()=default;Barm_bar;};intmain(){Foofoo;}当使用C++11default关键字和gcc警告-Weffc++时,gcc输出:warning:‘Foo::m_bar’shouldbeinitializedinthememberinitializationlist[-Weffc++]忽略此警告是否安全?我应该向gcc提交错误吗? 最佳答案 您可以忽略或抑制警告。这是对有效C++指南之一的误解。该指南说更喜欢初始化而不是赋值,但在您的示例中

c++ - 我可以忽略 gcc 警告 : ‘Foo::m_bar’ should be initialized in the member initialization list [-Weffc++]

structBar{Bar(){}};structFoo{Foo()=default;Barm_bar;};intmain(){Foofoo;}当使用C++11default关键字和gcc警告-Weffc++时,gcc输出:warning:‘Foo::m_bar’shouldbeinitializedinthememberinitializationlist[-Weffc++]忽略此警告是否安全?我应该向gcc提交错误吗? 最佳答案 您可以忽略或抑制警告。这是对有效C++指南之一的误解。该指南说更喜欢初始化而不是赋值,但在您的示例中

c++ - "Swapping values of two variables without using a third variable"中的潜在问题

我最近发现了这种方法,可以在不使用第三个变量的情况下交换两个变量的值。a^=b^=a^=b但是当我在不同的编译器上尝试上面的代码时,我得到了不同的结果,有些给出了正确的结果,有些没有。代码有什么严重错误吗? 最佳答案 Isanythingterriblywrongwiththecode?是的!a^=b^=a^=b实际上调用C和C++中的未定义行为,因为您试图更改a的值在两个序列点之间不止一次。尝试写作(虽然不是万无一失)a^=b;b^=a;a^=b;而不是a^=b^=a^=b.P.S:切勿尝试在不使用第三个变量的情况下交换两个变量的

c++ - "Swapping values of two variables without using a third variable"中的潜在问题

我最近发现了这种方法,可以在不使用第三个变量的情况下交换两个变量的值。a^=b^=a^=b但是当我在不同的编译器上尝试上面的代码时,我得到了不同的结果,有些给出了正确的结果,有些没有。代码有什么严重错误吗? 最佳答案 Isanythingterriblywrongwiththecode?是的!a^=b^=a^=b实际上调用C和C++中的未定义行为,因为您试图更改a的值在两个序列点之间不止一次。尝试写作(虽然不是万无一失)a^=b;b^=a;a^=b;而不是a^=b^=a^=b.P.S:切勿尝试在不使用第三个变量的情况下交换两个变量的

c++ - 使用 std::initializer_list 时防止缩小转换

#includestructX{X(std::initializer_listlist){std::cout是否有任何其他方法可以从重载列表中删除std::initializer_list(即,使非列表ctor更有利)而不是使用()初始化,或者至少禁止缩小转化范围(除了将警告转化为错误)?我使用的是http://coliru.stacked-crooked.com/使用GCC4.8的编译器。 最佳答案 实际上,在大括号列表初始化程序中包含缩小转换的程序是格式错误的。我不确定为什么编译器只是给你一个警告,但它肯定应该在这里发出一个错误

c++ - 使用 std::initializer_list 时防止缩小转换

#includestructX{X(std::initializer_listlist){std::cout是否有任何其他方法可以从重载列表中删除std::initializer_list(即,使非列表ctor更有利)而不是使用()初始化,或者至少禁止缩小转化范围(除了将警告转化为错误)?我使用的是http://coliru.stacked-crooked.com/使用GCC4.8的编译器。 最佳答案 实际上,在大括号列表初始化程序中包含缩小转换的程序是格式错误的。我不确定为什么编译器只是给你一个警告,但它肯定应该在这里发出一个错误

c++ - 你能把 std::recursive_mutex 和 std::condition_variable 结合起来吗?

你能不能把std::recursive_mutex和std::condition_variable结合起来,意思是做这样的事情:std::unique_locklock(some_recursive_mutex)some_condition_var.wait(lock);如果不允许,那为什么不呢?我正在使用VC++11。 最佳答案 如果您使用std::condition_variable_any,则可以,它允许支持可锁定概念的任何类型的对象。但是,在递归互斥锁的情况下,您必须确保给定线程只锁定了递归互斥锁一次,因为条件变量只会在上使

c++ - 你能把 std::recursive_mutex 和 std::condition_variable 结合起来吗?

你能不能把std::recursive_mutex和std::condition_variable结合起来,意思是做这样的事情:std::unique_locklock(some_recursive_mutex)some_condition_var.wait(lock);如果不允许,那为什么不呢?我正在使用VC++11。 最佳答案 如果您使用std::condition_variable_any,则可以,它允许支持可锁定概念的任何类型的对象。但是,在递归互斥锁的情况下,您必须确保给定线程只锁定了递归互斥锁一次,因为条件变量只会在上使