草庐IT

double-brace-initialize

全部标签

c++ - 使用 braced-init 初始化 std::shared_ptr<std::map<>>

我有以下shared_ptr到map:std::shared_ptr>我想使用braced-init来初始化它。可能吗?我试过:std::strings1("temp");std::shared_ptr>foo=std::make_shared>(1000.0,s1);但是在使用Xcode6.3编译时出现以下错误:/usr/include/c++/v1/map:853:14:Candidateconstructornotviable:noknownconversionfrom'double'to'constkey_compare'(aka'conststd::__1::less')fo

idea使用Spring Initializer创建springboot项目的坑【保姆级教学】

项目场景:提示:这里先简述项目创建后遇到的问题和解决方案:idea使用SpringInitializer创建springboot项目后,有以下问题:①右键没有Run②右键New新建文件发现无JavaClass选项然后解决掉①②问题后出现新的问题:③@SpringBootApplication注解爆红找不到引用④pom依赖能下载但是加载不到本地项目创建和解决方案提示:下面开始逐步演示创建过程遇到的问题和解决方案:①-File——>New——>Project②-选择默认Default,然后Next③-Type选择默认Maven,然后Next④-勾选上Web模板,然后Next⑤-选择好项目的位置,点

c++ - 不完整的类型和 initializer_list

我正在尝试为一些元数据建模以序列化/反序列化C++对象。这里有一些东西可以捕捉到我需要的细节;它使用GCC5.2(g++sample.cpp-std=c++14)和Clang3.6(clang++sample.cpp-std=c++14)编译。我的问题是关于示例中的structTypeInfo。它包含一个std::initializer_list本身。这符合标准吗?#include#includeenumclassTypeCode:std::uint8_t{BOOLEAN,INT,OBJECT,STRING,SENTINEL};structTypeInfo{TypeCodetypeCo

c++ - 为什么在 C++11 中为 std::initializer_list 重载 std::begin() 和 std::end()?

在C++11(引用N3337)中,std::begin()和std::end()被指定为(§24.7[iterator.range]/p2-3)templateautobegin(C&c)->decltype(c.begin());templateautobegin(constC&c)->decltype(c.begin());2Returns:c.begin().templateautoend(C&c)->decltype(c.end());templateautoend(constC&c)->decltype(c.end());3Returns:c.end().但是,std::in

c++ - 为什么 std::min(std::initializer_list<T>) 按值获取参数?

阅读thisquestion的答案,我惊讶地发现std::min(std::initializer_list)按值获取其参数。如果您使用std::initializer_list以其名称所暗示的方式,即作为某个对象的初始值设定项,我知道我们不关心复制它的元素,因为它们无论如何都会被复制以初始化对象。然而,在这种情况下,我们很可能不需要任何拷贝,因此将参数视为std::initializer_list似乎更合理。如果可能的话。这种情况下的最佳做法是什么?你不应该调用initializer_list吗?std::min的版本如果您关心不要进行不必要的复制,或者是否有其他一些技巧可以避免复制

c++ - 保留 std::initializer_list 的拷贝是否安全?这是什么道理?

在我的环境中,std::initializer_list被实现为指向第一个元素和大小的指针。仍然在我的特定设置中,我能够观察到:底层数据在当前函数帧中分配(因为指向第一个元素的指针是这样说的)从函数按值返回initializer_list不会更改指针的值(得出数据未与initializer_list一起复制的结论)。这使得复制initializer_list变得不安全,如果拷贝的生命周期比原始对象长。C++标准的进一步发布是否会维持这种行为?同样重要的是,这种行为背后的基本原理是什么?(今天真的很痛,所以我会天真地说这违背了“最不惊讶”的原则) 最佳答案

c++ - std::initializer_list 类型推导

最近写了一个很简单的类。classC{public:voidAddString(std::initializer_list>x){//irrelevant}};intmain(){Cc;c.AddString({{"1",1},{"2",2},{"3",3}});....//otherunimportantstuffreturn0;}令我惊喜的是,它编译并正常工作。有人可以向我解释一下编译器是如何推断出嵌套的大括号初始值设定项是用于std::pair的吗?我正在使用MSVS2013。 最佳答案 c.AddString({{"1",1

C++ float vs double cout setprecision 奇怪之处(新手)

谁能解释为什么当我使用setprecision()时这两个相同值的变量可以输出不同的值?#include#includeintmain(){floata=98.765;doubleb=98.765;//std::couta的输出将为98.76,而b的输出将为98.77。 最佳答案 那些变量不具有相同的值。当您将98.765的字面值double硬塞进float时,它必须进行最佳匹配,并且会损失一些精度。如果将精度更改为50,您可以很容易地看到这一点,您还会看到即使是double也不能准确表示该值:98.7649993896484375

c++ - C++ 中的异常处理 : Throwing a double when using "throw(int)"

下面的程序总是输出“Error:double10.2”。我不明白为什么。根据我的说法,如果fun1()只允许抛出int,那么程序应该要么(1)崩溃(2)或者把double改成int然后throw。这意味着,输出应该是“Error:int10”。然而,情况并非如此。谁能解释一下??voidfun1()throw(int){cout 最佳答案 您的编译器不符合标准。根据标准,您的程序应以调用std::unexpected结束。在让double异常转义fun1之后。也就是说-不要使用异常规范。它们已被弃用且无用。

c++ - if(double) 有效的 C++ 吗?

我刚遇到这行代码:if(lineDirection.length2()){...}其中length2返回一个double。让我有点困惑的是0.0等同于0、NULL和/或false。这是C++标准的一部分还是未定义的行为? 最佳答案 这是一个非常标准的行为(bool转换)$4.12/1-"Anrvalueofarithmetic,enumeration,pointer,orpointertomembertypecanbeconvertedtoanrvalueoftypebool.Azerovalue,nullpointervalue,