auto相关内容
如果函数模板返回 decltype(auto)(或使用 auto 的其他类型说明符)但返回语句格式错误,SFINAE 会产生结果吗?return 语句是否被认为是函数签名的直接上下文? N3690 草案中似乎没有任何要求.默认情况下,我猜 SFINAE 不适用. 这看起来很不幸,因为您可以编写一个函数来转发到另一个函数,但是您不能像手写那样以委托为条件使其存在.此外,如果没有 decl
..
如何对类成员使用自动类型推导?例如下面的代码 结构体A{自动 foo();//foo 在另一个文件中定义};int main(){一个;a.foo();} 其中 foo 具有返回类型 auto 导致以下错误: 错误:在定义之前不能使用具有推导返回类型的函数“foo"a.foo();^ 这个错误是可以理解的,因为编译器在不知道foo的定义的情况下无法知道它的返回类型是什么. 我的问题是
..
我收到以下代码的签名/未签名不匹配警告: auto n = a.size();for (auto i = 0; i
..
在 C++11 中,我可以像这样迭代某个容器: for(auto i : vec){std::cout
..
假设我有一个简单的 C++ 类,它包含一个私有成员和一个 getter: class MyClass{私人的:双 m_testValue = 1;民众:双&getTestValue(){return m_testValue;}} 现在假设我想调用 getter 来获取我的引用并编辑此值(并在值之前/之后打印) auto testVal = myClassInstance.getTestVal
..
在 Scott Meyer 的书中 Effective Modern C++ on page 167(印刷版),他给出了以下示例: auto timeFuncInvocation = [](auto&& func, auto&&... params) {//启动定时器;std::forward(func)(std::forward(params)...);//停止计时器并记录经过的时间;};
..
#include #include int main(){const char a[] = "你好世界";const char * p = "你好世界";auto x = "你好世界";if (typeid(x) == typeid(a))std::cout
..
我使用 C++14 在 GCC 中编译了以下程序. #include 使用命名空间标准;自动功能(int i);int main(){自动 ret = func(5);返回0;}自动功能(int i){如果(我== 1)返回我;别的返回 func(i-1) + i;} 但是,我收到以下错误. 在函数“int main()"中:8:16:错误:之前使用过“auto func(int)"扣除“汽
..
我有一个 C++14 代码.但是,当我在 C++11 中使用它时,它在 const auto 处出现错误.如何在 C++11 中使用它? vector>P;std::vectorF;向量 解决方案 C++11 不支持泛型 lambdas.这就是 lambda 参数列表中的 auto 实际代表的含义:泛型参数,类似于函数模板中的参数.(请注意,const 不是这里的问题.) 注意:C++
..
auto 似乎是在 C++11 中添加的一个相当重要的特性,它似乎遵循了许多较新的语言.和 Python 这样的语言一样,我没有看到任何显式的变量声明(我不确定是否可以使用 Python 标准). 使用 auto 来声明变量而不是显式声明变量是否有缺点? 解决方案 您只询问了缺点,所以我要强调其中的一些.如果使用得当,auto 也有几个优点.缺点是由于易于滥用以及代码以意外方式运行的
..
假设我有以下包含 lambda 的变量: auto a = [] { return true;}; 我希望 a 稍后返回 false.我可以做一些类似的事情吗? a = [] { return false;}; 此语法给了我以下错误: binary '=' : 没有找到采用右手操作数类型的运算符'主要::'
..
在 C++11 中指定尾随返回类型与普通返回类型相比有什么优势?在此处查看 foo1 与 foo2: int foo1() {返回 1;}自动 foo2() ->内部{返回 1;}int main() {foo1();foo2();} 解决方案 在这个例子中,它们的意思完全相同. 但是,一致地使用尾随返回类型形式有一些优点(Phil Nash 称这些形式为 “东端函数",因为返回类型在
..
C++20 允许对函数参数类型使用 auto. 是否还允许使用 auto 作为模板参数占位符(不相似,但本着 C++17 模板 以某种方式)用于函数参数类型? 所以下面的代码,在 C++20 之前: templatevoid printPair(const std::pair& p) {std::cout
..
代码: int main(void){自动 a=1;返回0;} 当文件具有 .c 扩展名时,由 MS Visual Studio 2012 编译器编译而不会出错.我一直认为,当你使用.c扩展名时,编译应该按照C语法,而不是C++.此外,据我所知,自 C++11 以来,C++ 中仅允许没有类型的 auto,这意味着该类型是从初始化程序推导出来的. 这是否意味着我的编译器没有坚持使用 C,或
..
在 C++14 中,为什么默认情况下具有推导返回类型的 lambda 函数会从返回类型中删除引用?IIUC,因为具有推导返回类型(没有显式尾随返回类型)的 C++14 lambda 函数的返回类型为 auto,这会删除引用(除其他外). 为什么会做出这个决定?在我看来,当您的 return 语句返回时删除引用就像一个陷阱. 这种行为给我带来了以下令人讨厌的错误: class Int
..
class Foo {民众:静态常量字符 *constant_string;};自动 Foo::constant_string = "foo";int main(void) {}; 编译:gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3 像这样: gcc -std=c++0x ./foo.cc./foo.cc:6:11: 错误:声明冲突‘auto Foo::co
..
如果我有一个函数: Foo&酒吧(){return///在这里创建一个非临时的 Foo 并返回对它的引用} 这是为什么: auto x = Bar();///可能调用复制构造函数 - 没有检查 和这个不一样? auto &x = Bar();///实际上在这里得到一个引用 (实际上,我希望第二个版本能够获得对参考的引用,这没什么意义.) 如果我将 x 的类型明确指定为值或引用,我
..
如果非静态数据成员在声明中初始化,C++11 是否允许将非静态数据成员声明为“自动"?例如: struct S{自动 x = 5;//代替'int x = 5;',这是绝对允许的}; GCC 4.7 拒绝上述代码,但它接受 int x = 5;. 假设这不是编译器错误而是标准确实不允许这样做,为什么不呢?它与声明局部变量 auto 一样有用. 解决方案 禁止非静态成员的规则在7.
..
鉴于我的变量是一个指针,如果我将它分配给“auto"类型的变量,我是否指定了“*"? std::vector*getVector();//返回填充向量//...std::vector*myvector = getVector();//假设有n个项目自动 newvar1 = myvector;//对比:自动 *newvar2 = myvector;//目标是表现得像这个任务:std::vector
..
可能的重复: C++0x auto 关键字太多了 我们(作为一个社区)是否有足够的经验来确定汽车何时和/或是否被滥用? 我真正想要的是关于 的最佳实践指南 何时使用自动 什么时候应该避免 可以在 80% 的情况下快速遵循的简单经验法则. 作为上下文,这个问题是由我的回答引发的 这里 解决方案 我认为当在您的项目中工作(或将工作)的协同程序员非常熟悉该类型时,
..