草庐IT

C++语法歧义

全部标签

c++ - Doxygen 支持 C++11 模板别名( 'using' 语法)?

我正在使用doxygen1.7.1为某些C++11代码生成文档,它似乎忽略了我的模板别名。为清楚起见,这里有一个模板别名的例子:templateusingResultOf=std::result_of::type;它也无法获取使用更清晰的新using语法编写的更多传统类型定义:usingPredicateOne=std::function;//Doxygendoesn'tcatchthistypedefstd::functionPredicateTwo;//butdoescatchthis.是否有设置或更高版本可以正确记录这些别名? 最佳答案

java - C++ 中的 System.out.println 函数语法

我想在C++中使用cout创建一个与java中的println函数相同的函数。这意味着调用应该是这样的:inta=5println("Astring"+a);变量a应该是任何基本类型。在这种情况下我应该有什么样的参数,它是如何工作的?谢谢 最佳答案 正如larsmans已经指出的,java在运算符+上有重载。所以你可以用整数连接字符串。这在C++中也是可能的,但并非对所有类型都是开箱即用的。您可以使用这样的模板化函数。#includeusingnamespacestd;templatevoidprinter(Tt){coutvoid

c++ - 我如何扩展 boost spirit 语法

事情是我做了一个对任务有用的语法,但是现在任务已更改,我需要定义新规则。但我不想修改已有的语法喜欢创建一个新的语法,它使用我现有的没有代码的语法重复,所以我只需要定义我需要的新规则。我尝试了一些东西像这样,但不起作用:structNew_grammar:Old_grammar{New_grammar():New_grammar::base_type(Command_list){Command_list%=qi::eps>>+Commands;Comandos%=oneoldCommand|NewCommand;NewCommand=("NewCommand">>stmt)[qi::_v

c++ - 在 CUDA 中初始化 dim3 变量, "dim3 dimGrid(numBlocks);"语法如何工作?

我正在学习CUDA,在大量示例代码中我看到block和网格维度设置如下:dim3dimGrid(numBlocks);dim3dimBlock(numThreadsPerBlock);exampleKernel>>(input);我知道像dim3dimGrid(numBlocks);这样的行正在初始化dimGrid,一个dim3类型的变量,将numBlocks作为它的x值-但我'我不确定这是如何工作的。我只是假设它是普通的C++语法,但对于C++,我认为该行必须这样写:dim3dimGrid=dim3(numBlocks);否则你会得到“最令人烦恼的解析”。所以我假设将这些行解释为变量

c++ - 是否存在无法避免 lambda 中的尾随返回类型语法的情况?

关于之前的问题(IsitpossibletoreturnanobjectoftypeTbyreferencefromalambdawithoutusingtrailingreturntypesyntax?),我想知道是否还有任何其他重要的案例或示例,其中trailing-return-type语法在使用lambda时可以不被避免。 最佳答案 在C++14中,一个有点人为的例子是将sfinae与通用lambda结合使用:[](auto&&arg)->decltype(arg.f(),void()){/*dowhateveryouwan

c++ - 带约束的可变参数模板的 'requires' 表达式的语法是什么?

如果我有一个可变参数模板;templateconceptFooable=requires(Tt){t.bar()->bool;};structFoo{intbig_foo;templateexplicitFoo(T&&i,U&&...f)noexcept:big_foo{std::forward(i)}{Something::something(std::forward(f)...);...}};然后模板的定义及其约束按预期工作。但是如果我“要求”对Foo有更多限制,那么使用“要求”表达式格式,例如;templaterequiresstd::Integral&&Fooable&&Bil

构造函数重载中的 C++ 作用域和歧义

我在3种不同的编译器(G++、clang++、CL.exe)中尝试了以下代码片段,它们都向我报告说它们无法消除重载构造函数的歧义。现在,我知道如何修改对构造函数的调用以使其选择一个或另一个(明确表示第二个参数是无符号文字值或显式转换它)。但是,我很好奇为什么编译器会首先尝试在构造函数之间进行选择,因为其中一个构造函数是私有(private)的,并且对构造函数的调用发生在应该在类范围之外的主函数中.谁能教教我?classTest{private:Test(unsignedinta,unsignedint*b){}public:Test(unsignedinta,unsignedintb)

c++ - 模板化类方法定义语法

类定义:template>classX{};我想在类代码块之外定义一个类方法。像这样:template>X::X(){}g++v.4.4.3返回error:defaultargumentfortemplateparameterforclassenclosing‘X::X()’为什么编译器会报错,我该如何让它工作? 最佳答案 您没有为X声明或定义构造函数。此外,您在尝试的X::X定义中重复了默认模板参数。这是固定代码,main-ified:template>classX{X();};templateX::X(){}intmain(){

c++ - 这是什么语法 : "ACGT"[(int)qrand() % 4]

我正在查看Qt特定的C++solution对于典型的生产者/消费者问题。这是生产者的代码:classProducer:publicQThread{public:voidrun(){qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));for(inti=0;i我无法理解for循环中的第二行,即。"ACGT"[*]语法。它具体做什么?这是Qt特定的还是我不知道的C++语法?PS:完整源代码here 最佳答案 它生成一个随机字符:A、C、G、T。Literal"ACGT"是charconst[

C++ 重载歧义 : conversion versus promotion with primitive types

在这段代码中:voidf(floatf,longinti){cout有一个歧义。Checkitout!.但是,第二个参数是有符号整数。将int绑定(bind)到longint参数需要提升,但对于float,则需要转换。由于第一个参数是关于两个重载的完全匹配,所以它不算数。但是关于第二个参数,它在第一次过载(提升)上的排名优于在第二个(转化)上的排名。为什么会出现解析歧义,而不是选择第一个重载? 最佳答案 int到long是一个转换。short到int是一种提升。(有关积分促销的完整列表,请参阅[conv.prom]。)同理,floa