相关疑难解决方法(0)

通过const值返回的目的?

const的目的是什么?

const Object myFunc(){
    return myObject;
}
Run Code Online (Sandbox Code Playgroud)

我刚刚开始阅读Effective C++,而第3项提倡这一点,Google搜索也提出了类似的建议,但也有反作用.我看不出在这里使用const会更好.假设需要按值返回,我认为没有任何理由保护返回的值.给出为什么这可能有用的示例是防止返回值的意外bool强制转换.实际问题是应该使用explicit关键字来防止隐式bool强制转换.

在这里使用const可以防止在没有赋值的情 所以我无法用这些对象执行算术表达式.似乎没有一个未命名的const有用的情况.

在这里使用const获得了什么,何时更可取?

编辑:将算术示例更改为修改在分配之前可能要执行的对象的任何函数.

c++ const

119
推荐指数
3
解决办法
10万
查看次数

对于非内置类型,使用const值返回函数有什么用例?

最近我读过,从函数返回值来为非内置类型限定返回类型const是有意义的,例如:

const Result operation() {
    //..do something..
    return Result(..);
}
Run Code Online (Sandbox Code Playgroud)

我很难理解这个的好处,一旦对象被返回肯定是调用者的选择来决定返回的对象是否应该是const?

c++ const-correctness

40
推荐指数
4
解决办法
7710
查看次数

在引用限定符上重载成员函数的用例是什么?

C++ 11使得基于引用限定符重载成员函数成为可能:

class Foo {
public:
  void f() &;   // for when *this is an lvalue
  void f() &&;  // for when *this is an rvalue
};

Foo obj;
obj.f();               // calls lvalue overload
std::move(obj).f();    // calls rvalue overload
Run Code Online (Sandbox Code Playgroud)

我理解这是如何工作的,但它的用例是什么?

我看到N2819建议将标准库中的大多数赋值运算符限制为左值目标(即向赋值运算符添加" &"引用限定符),但这被拒绝了.所以这是一个潜在的用例,委员会决定不再使用它.那么,再一次,什么是合理的用例?

c++ overloading qualifiers rvalue-reference c++11

24
推荐指数
2
解决办法
3131
查看次数

如何使用clang ++与-std = c ++ 11 -Weverything -Werror

我想编译以下文件(temp.cpp):

#include <iostream> 

class Foo {
public:
  Foo() = default;
};

int main(){
  std::cout << "Works!" << std::endl;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

使用以下命令: clang++ temp.cpp -o temp -std=c++11 -Weverything -Werror

有一个错误:

temp.cpp:5:11:错误:默认函数定义与C++ 98不兼容[-Werror,-Wc ++ 98-compat]

我知道有一个类似c ++ 98-compat的警告,它是一切的一部分.如何启用除c ++ 98-compat之外的所有警告?-Weverything是否有c ++ 11兼容标志?

c++ compilation clang compiler-warnings c++11

16
推荐指数
1
解决办法
6157
查看次数

模板参数替换的惊喜?

N3690,§14.8.2第3段有一个非常令人兴奋的例子:

template <class Z> void h(Z, Z*);
// #5: function type is h(int, const int*)
h<const int>(1,0);
Run Code Online (Sandbox Code Playgroud)

问题:为什么不h(const int, const int*)呢?

从什么知道,Z = const int所以Z模板声明中的每个出现都可以被读作const int,或者我错过了什么?为什么指针不同?我记得当参数有T&T*它保留了cv-qualifiers时T,但我认为没有任何可能在这里应用它.

c++ templates language-lawyer c++14

7
推荐指数
2
解决办法
286
查看次数