草庐IT

c++ - #elif 定义时没有括号

使用带有BLAH_BLAH的VS2005定义了以下预处理器条件为假:#elifdefinedBLAH_BLAH但是如果我把它改成#elifdefined(BLAH_BLAH)这是真的。为什么括号在这里有所不同? 最佳答案 它应该没有任何区别,除非BLAH_BLAH被定义为有趣的东西。 关于c++-#elif定义时没有括号,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/522378

c++ - 为什么在 C++11/C++14 中有针对自动和大括号初始化器的特殊类型推导规则?

在他的CppCon2014演讲中"TypeDeductionandWhyYouCare",ScottMeyers提出了一个问题,为什么在C++11/C++14标准中有关于auto和大括号初始化器的特殊规则(他的问题从at36m05s开始)。auto与braced-init-list组合的语义在§7.1.6.4/6中定义。我想了想,也想不出一个用例。到目前为止,我所看到的最接近的例子是BjarneStroustrup使用它的一个例子。在他的Cpp2014talk"MakeSimpleTasksSimple!",他曾经使用auto来捕获初始化器(但只是作为一种变通方法)。这是代码(幻灯片3

c++ - 在 Visual Studio 2015 中将其他内容与右括号保持在同一行?

我已经设法让VisualStudio像这样将左括号保持在同一行(此设置位于Formatting->NewLines下;我正在寻找的设置,如果它们存在,不在这个选项范围内):voidfoo(){bar();}但我不知道如何将else和catchblock与前一个语句的结束括号保持在同一行。澄清一下,这是VisualStudio自动格式化为:if(foo){return1;}else{return2;}这就是我想要的:if(foo){return1;}else{return2;} 最佳答案 转到工具->选项,然后是常规->文本编辑器->

c++ - 为什么在 C++ 顶点函数中有两个括号 [?

我正在观看Apple关于Metal和MetalKit的介绍视频。着色器的示例代码有这些双括号,如[[buffer(0)]]参数。为什么有两个括号?它是什么意思还是只是表明后面有关键字“buffer”?标准C++中没有这样的构造,是吗?vertexVertexvertex_func(constantVertex*vertices[[buffer(0)]],constantUniforms&uniforms[[buffer(1)]],uintvid[[vertex_id]])还有什么是1或2周的有趣项目作为GP-GPU的介绍?对于具有良好数学技能但没有艺术技能的新手来说,这是可以应付的。

c++ - 方括号和圆括号运算符,如何选择重载?

我想使用operator[]访问某些类数据,但根据方括号中的索引类型返回一种数据或其他数据。作为一个简化的例子:structS{int&operator[](intindex){std::cout无法编写short字面量,因此选择short重载的唯一方法是强制转换:Ss;std::cout但我不喜欢它,我想知道是否有不同的选择。我尝试了什么?标记参数。首先我尝试使用“标签”:structS{enumclassi_type:std::int32_t{};enumclasss_type:std::int32_t{};int&operator[](i_typeindex){std::cout

c++ - 我们什么时候应该使用圆括号 ( ) 与 initializer { } 语法来初始化 C++11 中的对象?

这个问题在这里已经有了答案:Whentousethebrace-enclosedinitializer?(3个答案)关闭6年前。已更新我已经通过链接(例如Whentousethebrace-enclosedinitializer?)了解何时应该使用{}大括号初始化,但没有给出何时应该使用括号()的信息与初始值设定项{}在C++11/14中初始化对象的语法?建议使用哪些标准做法()在{}?在极少数情况下,例如vectorv(10,20);或autov=vector(10,20);,结果是std::vector有10个元素。如果我们使用大括号,结果是std::vector有2个元素。但这取

c++ - std::array<std::vector> 中的大括号省略

我正在为C++17使用g++进行编译。我有以下内容:std::array,2>v={{{1,2},{3,4}}};我不明白为什么如果我删除数组的双括号它就不再起作用了。std::array,2>v={{1,2},{3,4}};//Doesnotcompile我了解std::array的工作原理以及通常需要双大括号,但在为C++17进行编译时,我希望大括号省略发挥作用。为什么大括号省略在这里不适用? 最佳答案 std::array,2>是有效的structarray{std::vectorelems[2];};elems是一个子聚合就

c++ - 使用 C++ 在其名称周围使用括号调用函数

我在boost中发现代码类似于:classA{statsstat;public:intmin()const{return(stat.min)();}};...intstats::min(){...}这里为什么要加括号?我知道它可以用于“最烦人的解析”并禁止ADL。但也许是别的什么?提前致谢! 最佳答案 这是因为windows.h(Windows平台)对最小值和最大值都有#defines。有关更多信息,请参见此处:HowtotametheWindowsheaders(usefuldefines)?和https://stackoverf

c++ - 为什么将括号与默认构造函数一起使用会导致创建变量?

这个问题在这里已经有了答案:Whatisthepurposeofadeclarationlikeint(x);orint(x)=10;(2个答案)WhydoesC++allowustosurroundthevariablenameinparentheseswhendeclaringavariable?(2个答案)关闭4年前。看完LouisBrandy在CppCon2017上的演讲后,我震惊地发现这段代码实际上可以编译:#includeintmain(){std::string(foo);return0;}出于某种原因std::string(foo)它与std::stringfoo相同,

c++ - 为什么不能将一个 int(代表一个 ASCII 字符)转换为一个 std::string 而不用花括号包裹 int?

intmain(){std::stringA;A+=(std::string)65;std::cout上面的代码不起作用。它会引发编译器错误。但是下面的代码有效。intmain(){std::stringA;A+=(std::string){65};std::cout当我将65括在大括号中时,它被解释为我想要的ASCIIA,但没有大括号,程序将无法运行。我还尝试将多个数字放在大括号中,如下所示:intmain(){std::stringA;A+=(std::string){65,66};std::cout这将打印出AB。我只希望有人能为我解决这个问题。 最佳