在我的机器上安装Visual Studio 2015 Update 1之后,我看到我的一些单元测试失败了.在做了一些调查后,我能够将问题减少到这行代码:
Expression<Func<GameObject, bool>> expression = t => t.X == 0 && t.Y == 0 && t.GameObjectType == GameObjectType.WindMill;
Run Code Online (Sandbox Code Playgroud)
将鼠标悬停在表达式变量上时,Visual Studio版本中的结果会有所不同:
正在对枚举进行比较的逻辑(ServiceStack.OrmLite代码中的某个地方)现在采取了不同的行为,最终导致枚举不被识别为枚举,从而导致单元测试失败.
我能够使用以下代码重现该问题:
class Program
{
static void Main(string[] args)
{
var gameObjects = new List<GameObject> {
new GameObject { X = 0, Y = 0, GameObjectType = GameObjectType.WindMill },
new GameObject { X = 0, Y = 1, GameObjectType = GameObjectType.Pipe },
new GameObject { X = 0, Y = …
Run Code Online (Sandbox Code Playgroud) 与我之前的问题相关的排序:
数组元素是否算作一个常见的初始序列?
struct arr4 { int arr[4]; };
struct arr2 { int arr[2]; };
union U
{
arr4 _arr4;
arr2 _arr2;
};
U u;
u._arr4.arr[0] = 0; //write to active
u._arr2.arr[0]; //read from inactive
Run Code Online (Sandbox Code Playgroud)
在具有非联合类类型T1的活动成员的标准布局并集中,允许读取非联合类类型T2的另一个联合成员的非静态数据成员m,前提是m是公共初始序列的一部分T1和T2 ......
这是合法的,还是非法类型的惩罚?
我很好奇,如果函数指针可以存储在一个文件中,并在程序退出并重新启动的某个未来时间点使用.例如,我的第一个测试程序看起来像这个伪代码:
void f(){}
typedef void(*Fptr)();
int main() {
int i;
cin >> i;
if (i == 1) {
std::ofstream out(/**/);
out << &f;
}
else {
std::ifstream in(/**/);
Fptr fp;
in >> fp;
fp();
}
}
Run Code Online (Sandbox Code Playgroud)
这只是我想要做的逻辑.我会用输入启动它1
,让它退出,然后用输入再次运行它2
.不要认为这是我的真实代码,因为我删除了原始测试,因为......
只有在我不更改可执行文件所在的目录时才有效!
将新文件添加到目录(可能是删除文件)并将可执行文件移动到新位置都会导致fp();
崩溃.新函数地址将是不同的值.
所以我做了一个新的测试,计算旧函数指针和当前函数地址之间的差异.将该偏移量应用于旧函数指针并调用它会产生正确的函数调用,无论我对目录执行什么操作.
我相信这是UB.但是,像取消引用空指针一样会导致段错误,UB非常一致.
除了用垃圾重写数据,并假设函数没有加载到DLL中,这种方法有多大可能成功?它会以什么方式失效?
如果我获取右移位运算符的地址并将其作为模板参数传递,则右移位符号被误读为模板参数列表的末尾,由此产生的混淆导致多个错误.
template <class T, void(T::*)(int)> struct TemplateMagic {};
struct TestStruct { void operator>> (int) {} };
int main() {
//All the errors are on this line:
TemplateMagic<TestStruct, &TestStruct::operator>> >* ptr;
}
Run Code Online (Sandbox Code Playgroud)
在Microsoft Visual Studio Express 2013 for Windows桌面版本12.0.31101.00 Update 4中运行此操作会出现以下错误:
错误C2143:语法错误:缺少';' 在'>'之前
错误C2275:'TestStruct':非法使用此类型作为表达式
错误C2833:'operator>'不是可识别的运算符或类型
据我所知,operator>> >
符号被分开,因此它将其读作operator>
,然后是终止>
以关闭模板参数,并以>
lulz 的备用结束.我认为这是一个错误.
有没有办法改写这个,以便它被认为是有效的?
我有一个可变参数模板类,它可以在构造函数中使用任意数量的变量,还有 astd::tuple/std::pair
等等。
我想将此包装器用于具有不同返回类型的函数。
例如:
class f1
{
using output = double;
output operator() { do_smth };
}
class f2
{
using output = std::tuple<double,int>;
output operator() { do_smth };
}
template <typename... Types>
class OutputType
{
std::tuple<Types...> m_val;
public:
OutputType(std::tuple<Types...>&& val) : m_val(val) {};
OutputType(Types&& ... val) : m_val(std::forward<Types>(Types)...) {};
};
Run Code Online (Sandbox Code Playgroud)
现在在第三堂课中,我想像这样声明使用:
template <typename F>
class dummy
{
using Output = typename OutputType(typename F::Output));
}
Run Code Online (Sandbox Code Playgroud)
我如何声明上面的 using 语句,以便它也为 做正确的事情dummy<f2>
?
(即OutputType<double,int>
而不是OutputType<std::tuple<double,int>>
)
client.Index
使用Nest和Elasticsearch.NET 时调用时出错
var httpConnection = new AwsHttpConnection(new AwsSettings
{
AccessKey = "AKIAIFIV4LN6XZAFVX7Q",
SecretKey = "MySecretKey",
Region = "us-east-1",
});
var pool = new SingleNodeConnectionPool(new Uri(sSearchURI));
var config = new ConnectionSettings(pool, httpConnection);
var client = new ElasticClient(config);
var person = new Person
{
Id = "1",
Firstname = "Martijn",
Lastname = "Laarman"
};
var index = client.Index(person);
Run Code Online (Sandbox Code Playgroud)
从NEST调度Index()到Elasticsearch.NET失败
接收标记为PUT的请求此端点接受POST,PUT请求可能没有提供足够的信息来生成任何这些端点:
- /{index}/{type}
- /{索引}/{类型}/{ID}
任何的想法?
我是一个初学者C++程序员,所以有语言结构,我不明白这使我从认识的地图的API(供您参考,在这里)
更重要的是,一些问题:
如何更改map的内部排序方案,以便在我们使用的情况下map::<string, ...>
,键值按字母顺序排序?
更具体地说map::key_comp
,它是一个定义和遗忘的东西,一旦我们定义了相同类型的两个元素"不等(一个小于另一个)"意味着什么,那么排序是内部和自动完成的 - 所以我们需要插入键/值对?或者我们必须定义相等/排序然后显式调用函数返回一个布尔来实现有序插入?
我有以下c ++函数,我想知道如何将int
a 转换为a 语句string
的else
子句if
.
string afficherValeurNominal(int val)
{
string valAffiche = "";
if (val == 11) // carte j
{
valAffiche = "V";
}
else if (val == 12) // carte Q
{
valAffiche = "D";
}
else if (val == 13) // carte k
{
valAffiche = "R";
}
else
{
valAffiche = val;
}
return valAffiche;
}
Run Code Online (Sandbox Code Playgroud) 我有一个vector
C++.
vector<bool> trumpIsGoodFor(42);
Run Code Online (Sandbox Code Playgroud)
我需要设置除第24个元素之外的所有元素true
.
我想使用C++ 11/14使用一行/两行或优雅的作业来完成它.
c++ ×7
arrays ×2
c# ×2
c++11 ×2
.net ×1
.net-4.6 ×1
c ×1
containers ×1
dictionary ×1
nest ×1
syntax-error ×1
templates ×1
unions ×1
vector ×1