这段代码:
if( someCondition )
return doSomething();
return doSomethingElse();
Run Code Online (Sandbox Code Playgroud)
与此代码:
if( someCondition )
return doSomething();
else
return doSomethingElse();
Run Code Online (Sandbox Code Playgroud)
从本质上讲,它们是相同的,但最佳的风格/表现/ ......(如果当然对答案有任何非自以为是的部分)?还要考虑多个"if else's"的情况:
if( someCondition )
return doSomething();
else if( someOtherCondition )
return doSomethingDifferently();
//...
else
return doSomethingElse();
Run Code Online (Sandbox Code Playgroud)
谢谢!
这在理论上取决于任务吗?
它是否可以实际完成,并且生成的解析器是否可以使用足够的性能和输出(例如,LLVM IR或GCC的gimple)来集成到竞争编译器中?
我需要一种跨平台的方式来获取当前的工作目录(是的,getcwd做我想要的).我认为这可能会成功:
#ifdef _WIN32
#include <direct.h>
#define getcwd _getcwd // stupid MSFT "deprecation" warning
#elif
#include <unistd.h>
#endif
#include <string>
#include <iostream>
using namespace std;
int main()
{
string s_cwd(getcwd(NULL,0));
cout << "CWD is: " << s_cwd << endl;
}
Run Code Online (Sandbox Code Playgroud)
我读到了这个:
应该没有内存泄漏,它也可以在Mac上运行,对吗?
更新:我担心这里仍然存在错误(我试图避免创建一个具有确定长度的char数组,因为没有正确的方法来获得getcwd的合适长度):
char* a_cwd = getcwd(NULL,0);
string s_cwd(a_cwd);
free(a_cwd); // or delete a_cwd?
Run Code Online (Sandbox Code Playgroud) 我想将存储在未分类矢量中的unique_ptr移动到另一个矢量,该矢量将包含指针的排序矢量.
肯定移动unique_ptr不会自动擦除第一个向量中的元素?我怎样才能做到这一点?
我想做的例子:
std::vector<std::unique_ptr<T> > unsorted, sorted;
// fill the "unsorted" vector
while( unsorted.size() > 0 )
{
const auto it = find_next_element_to_add_to_sorted(unsorted);
sorted.push_back( std::move(*it) );
}
Run Code Online (Sandbox Code Playgroud)
我希望意图清楚.
更新:我的算法不允许就地排序.如果今天有人感觉很好(我没有问,请参阅上面的问题),请随意为这种情况实施并告诉我.我真的需要"按移动排序".我真的不明白为什么移动会是昂贵得多.
我在代码中的某个地方有这个lambda:
[](bool a, bool=true){ return !a;} }
Run Code Online (Sandbox Code Playgroud)
和GCC 4.6"抱怨"这个警告:
warning: default argument specified for lambda parameter [-pedantic]
Run Code Online (Sandbox Code Playgroud)
当你不知道为什么这是"坏"时,这是非常无益的.我咨询了FDIS n3290,但没有找到5.1.2 Lambda Expressions关于默认参数和lambda的任何内容.
更新:我在这里提交了一份错误报告.
更新2:好的,从现在开始我正在使用-pedantic-errors.-pedantic只发出警告,而不是错误.
我试图使用grep,就像我习惯使用Linux一样,具有所有令人惊叹的功能和RegEx的所有功能......但是在Mac OS X上它并没有像我期望的那样工作.
如果我使用"-P"(Perl Regex),它会给我"使用"( - help)输出.在那里我们在参数列表"-abcDEFGHhIiJLlmnOoPqRSsUVvwxZ"中找到"-P"参数......仍然无效.
另一个例子是星号或加号.我正在尝试这个http://wiki.bash-hackers.org/howto/conffile
检查配置文件中指令使用的不适当内容:
if egrep -q -v '^#|^[^ ]*=[^;]*' "$configfile"; then
echo "Config file is unclean, cleaning it..." >&2
# filter the original to a new file
egrep '^#|^[^ ]*=[^;&]*' "$configfile" > "$configfile_secured"
configfile="$configfile_secured"
fi
Run Code Online (Sandbox Code Playgroud)
它不适用于这样的行:
DATABASE=some_database; ls -la
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?因为所有这些在Linux机器上运行正常.
当我发现下面的代码输出"指针"时,我遇到了真实的WTF时刻.
#include <iostream>
#include <utility>
template<typename T>
struct bla
{
static void f(const T*) { std::cout << "pointer\n"; }
static void f(const T&) { std::cout << "reference\n"; }
};
int main()
{
bla<std::pair<int,int>>::f({});
}
Run Code Online (Sandbox Code Playgroud)
将std::pair<int,int>模板参数更改为int或任何其他基本类型,给(至少对我来说)预期的"模糊过载"错误.似乎内置类型在这里是特殊的,因为任何用户定义的类型(聚合,非平凡,具有默认构造函数等)都会导致调用指针超载.我相信模板不是重现它的必要条件,它只是让尝试不同类型变得简单.
就个人而言,我不认为这是合乎逻辑的,我认为在所有情况下都会出现模糊的重载错误,无论模板参数如何.GCC和Clang(我相信MSVC)在C++ 11/14/1z中都不同意我的观点.注意我完全知道这两个重载存在的错误API ,我保证不会写这样的东西.
所以问题就变成了:发生了什么?
我希望有一个"新标签"按钮,就像Chrome或Firefox一样QMdiArea.
我可以在某处创建一个按钮或菜单项,为MDI添加一个新的子文档,但是如何使它成为一个带有"+"标签的视觉上吸引人的小标签?或者,我会很满意QTabWidget这样一个按钮.
任何人都可以了解C++库的版本控制和发布
由于我对GCC编程的有限接触,我从未见过C++运行时库与程序一起分发.MS Windows程序通常就是这种情况.
一个相对较旧的Linux系统可以运行一个较新的C++ 14程序(在较新的系统上编译,然后复制到旧系统)?
GCC程序员是否与程序一起分发运行时库?如果不是,为什么Windows程序会分发它们?GCC发行版如何确保C++程序在安装时始终有效?
那么Qt这样的框架怎么样,Qt如何在Linux和Windows上处理版本控制和发布?Qt是否还为不同版本分发运行时?
可能与平台有关,Linux的设计方式与Windows的设计方式有关.
GCC和MS Windows采用的方法有何根本不同?
我知道我能做到
auto&& bla = something();
Run Code Online (Sandbox Code Playgroud)
并且根据const返回值的something不同,我会得到一个不同的类型bla.
这是否也适用于结构化绑定案例,例如
auto&& [bla, blabla] = something();
Run Code Online (Sandbox Code Playgroud)
我猜是这样的(结构化绑定捎带在auto初始化器上,表现得像这样),但我找不到肯定的肯定.
更新:初步测试似乎符合我的预期(const正确推导出来):
#include <tuple>
using thing = std::tuple<char, int*, short&, const double, const float&>;
int main()
{
char c = 0;
int i = 1;
short s = 2;
double d = 3.;
float f = 4.f;
thing t{c, &i, s, d, f};
auto&& [cc, ii, ss, dd, ff] = t;
c = 10;
*ii = 11; …Run Code Online (Sandbox Code Playgroud) c++ language-lawyer forwarding-reference c++17 structured-bindings
c++ ×8
c++11 ×4
qt ×2
bash ×1
boost ×1
boost-spirit ×1
c ×1
c++17 ×1
gcc ×1
getcwd ×1
grep ×1
if-statement ×1
lambda ×1
macos ×1
parsing ×1
qmdiarea ×1
qtabwidget ×1
regex ×1
tabs ×1
unique-ptr ×1
visual-c++ ×1