我不明白为什么我会这样做:
struct S {
int a;
S(int aa) : a(aa) {}
S() = default;
};
Run Code Online (Sandbox Code Playgroud)
为什么不说:
S() {} // instead of S() = default;
Run Code Online (Sandbox Code Playgroud)
为什么要为此引入一个新关键字?
C++中"using"关键字背后的逻辑是什么?
它用于不同的情况,我试图找出是否所有这些都有共同点,并且有一个理由为什么使用"using"关键字.
using namespace std; // to import namespace in the current namespace
using T = int; // type alias
using SuperClass::X; // using super class methods in derived class
Run Code Online (Sandbox Code Playgroud) 对齐对C++ 11的性能是否真的重要?
在Stroustrup的书中有一条建议,要求从最大到最小的结构中对成员进行排序.但我想知道是否有人进行了测量,以确定是否会产生任何影响,并且在编写代码时是否值得考虑.
我应该总是在C++ 11中为getter使用noexcept方法修饰符吗?
我的意思是简单的吸气者,只是回归成员.至少在我所有的getter中,我有一个例外是不可能抛出的.一个缺点是getter变得过于冗长:
const std::string& getName() const noexcept{ return name; }
Run Code Online (Sandbox Code Playgroud)
Stroustrup的书中指出的好处是编译器可能会在这里和那里做一些优化.
关于new和delete的用法,以及Stroustrup的建议......
他说的是(但不完全是,这来自我的书中的笔记):
根据经验,
new
属于构造函数和类似操作的delete
属于析构函数.此外,new
通常用于资源句柄的参数.否则,请避免使用new
和delete
,而是使用资源句柄(智能指针).
我想知道更有经验的C++ 11用户是否真的应用了这个.
我对此的印象是,哇这似乎是一个非常酷的规则.但是,就任何一般规则而言,我都怀疑.在一天结束时,您将最终使用new并在必要时删除.但也许这个规则是一个我不知道的好准则.
为接口和实现设置单独的命名空间是否值得?
Stroustrup在他的C++书(第四版)中的建议是我们应该为接口和实现使用单独的命名空间.更有经验的人能说出这个吗?我的意思是听起来不错,但是它真的很实用,在真实世界的项目中有意义吗?
是否可以在C++中自动生成析构函数?
自己一直这样做是一个太大的负担.编译器生成析构函数是否如此困难?它不能检测什么是"资源"并在析构函数中释放它?
=default 和没有参数的空构造函数之间的区别?
是否有区别:
MyClass() {}
MyClass() = default;
Run Code Online (Sandbox Code Playgroud) Java中C#lock的等价物?
例如:
public int Next() {
lock (this) {
return NextUnsynchronized();
}
}
Run Code Online (Sandbox Code Playgroud)
如何将此C#方法移植到Java?
我有以下代码:
string const& operator[] (size_t index) const { return elems[index]; }
Run Code Online (Sandbox Code Playgroud)
不应该是:
const string&
Run Code Online (Sandbox Code Playgroud)
?