介绍"auto"的同义词
Introducing synonyms for "auto"
介绍"auto"的同义词
我想在c++中使用"几乎总是自动"的样式,但以更具描述性的形式,反映初始化的语义。
为了做到这一点,我想介绍auto的4种不同用法的同义词。
大意可以从下面的例子中理解:
#define Val const auto // initialize (immutable) value
#define MVal auto // initialize mutable value
#define Ref const auto& // initialize (immutable) reference
#define MRef auto&& // initialize mutable reference
Val num = 2 + 2;
MVal count = 0;
++count;
Ref widget = GetWidget();
MRef gadget = GetGadget();
gadget.ChangeState();
出现了几个问题:
Q1:可以不使用宏引入同义词吗?
Q2:如果宏是不可避免的,我如何减轻使用它们的危害(假设同义词应该非常短)?
Q3(主要基于意见):从可读性/风格的角度来看,这是一个好主意吗(与赤裸裸的aaa风格相比)?
Q4(疯狂):是否有任何根本原因不允许在类型中使用auto(可实现性,与其他特性的不良交互)?(假设"typedef auto"可用,这个问题可以轻松解决)
不。Q2。通过尽可能少地使用它们。第三季。很坏。c++程序员习惯于给定的语法。第四季度。我不明白你想要什么,或者为什么。
是的,同义词可以通过这种方式引入。Q2。使用ALLUPPERCASE来遵循约定。第三季。但一般来说,这不是一个好主意,我会发现const auto
比VAL
Q4更具可读性。我认为这是不支持的,因为typedef是一个定义的类型,而const auto
不是。
相关文章:
- 在for循环中使用auto vs decltype(vec.size())来处理字符串的向量
- 如何在自定义类中启用'auto loops'?
- 当我在第一个循环中使用"auto"时,它工作正常,但是使用"int"它会给出错误,为什么?
- 为什么当我为 for(auto& it : myUnorderedMap) {... = std::move(it.second)} 时,我会得到一个 const 引用?
- 为什么结构化绑定不使用"auto&"返回对结构成员的引用,而是返回成员本身
- 擦除许多矢量元素,同时使用'auto'
- 考虑到其他好处,关键字'auto'真的有助于简化调试C++吗?
- 为什么"weak.lock()"返回"nullptr" "auto weak=std::make_shared<int>(42);"的定义?
- 推理类型如何工作"auto"和按引用调用?
- 你能在C++中定义同义词吗?
- 'auto *x = new some_struct{};"是一个未初始化的变量?
- 为什么 std::gcd/lcm 返回 std::common_type_t<M, N> 而不是 auto?
- 将函数参数类型声明为 auto
- 使用constexpr + auto作为返回和参数类型的奇怪类型推导
- 为什么 const auto &p{nullptr} 在 C++17 中不起作用,而 auto *p{nullptr} 不起作用?
- C++/11 auto 关键字是在更有效时推导参数进行按引用传递,还是始终按值传递?
- 使用"auto"推断嵌套初始值设定项列表的类型
- const auto & 和 auto & if reference 对象之间的区别是 const
- C++:带有 "auto" 的二维数组上的嵌套 For 循环
- 介绍"auto"的同义词